Laravelのbladeファイル上では、変数を波カッコ {{ }} で囲んで表示します
これによってエスケープ処理を行っているのですが、エスケープ処理とは何か。
また、エスケープ処理をしないとどうなるのか。
初心者の方向けに、具体例入りで分かりやすく解説していきます。
ということで、超分かりやすく解説よろしく。
了解。
エスケープ処理とは
エスケープ処理とは、プログラミング言語、マークアップ言語を扱う際、コード部分の記号などを別の文字に置き換えること。
たとえば、次のようなコードがあるとします。
この文章をそのまま保存せず、カッコ部分を別の文字に置き換えます。
これによってコードではなく、文字列として扱うことができます。
ふぅん・・・
でも、なんでコードを文字列にする必要があるの?
それは、そうしないと、とってもキケンだから!
えっ!
なぜエスケープ処理が必要か
エスケープ処理の主な目的は、セキュリティです。
たとえば、Web上に投稿フォームに悪意あるユーザーがアクセスしてきたとします。
ユーザーの情報を悪いサイトにもっていくコードを仕込んできたとします。
エスケープ処理を行っていなければ、コードはそのままコードとして実行されてしまいます。
こういった詐欺の手法をクロスサイトスクリプティング(XSS)と呼びます。
なんだか、コワい。
だよね。
だからエスケープ処理が必要なんだ。
Laravelでのエスケープ処理の方法
エスケープ処理の大事さをお伝えしましたが、ここからは、実際の処理の方法を説明します。
PHPでは、エスケープ対策のために htmlspecialchars() 関数が使われます。
う、長い。
Bladeの{{ }}
記法はXSS攻撃を防ぐため、自動的にPHPのhtmlspecialchars
関数を通されます。
波カッコで囲むだけって、簡単!
Laravelは、セキュリティ対策がしやすいんだ。
それじゃ実際に試してみよう。
Laravelでエスケープ処理をテストした結果
ちゃんと文字になってる!
エスケープ処理のおかげだよ。
ところでエスケープ処理をすると、なんでこんなふうに表示されるの?
それは、ソースコードを見れば分かるよ。
なお、このように本来の動作を無効にする文字をエスケープ文字と呼びます。
おまけ:エスケープ処理を無効にするには
ちなみにLaravelでは、「あえてエスケープ処理をしたくない」という場合もあります。
この場合には、波カッコをひとつ減らし、エクスクラメーションマーク(びっくりマーク)を2つ付けましょう。
ただし、この処理をするときには注意してください。
使うにしても、自分や限られたメンバーによる投稿内容に制限したほうが、無難です。
Laravelのマニュアルでも、エスケープせずに投稿内容を表示することについて、次のように警告をしています。
ユーザーの入力を表示するときは、常に二重の波括弧の記法でHTMLエンティティにエスケープすべきです。
*参考元:Laravel公式マニュアル bladeテンプレート
さいごに
今回のポイントをまとめると、次の5点。
- エスケープ処理の目的:コードを文字列にすること
- エスケープ処理をしないと XSS詐欺に狙われる危険がある
- Laravelでのエスケープ処理は、二重波カッコで囲むだけ
- エスケープ処理によってカッコなどがエスケープ文字に置き換わる
- エスケープを無効にしたければ、{!! !!} で対象を囲めば良い
エスケープ処理のほかにも、実は大事なセキュリティ対策があります。
セキュリティ対策と詐欺の手法をまとめた記事があるので、併せて参考にしてくださいね。