XSS対策 for Laravel

Laravelのクロスサイトスクリプティング対策

Controller側で対策する

Laravelでは他のPHPフレームワークと同様に悪意あるスクリプトを無害化(サニタイズ)する機能が備わっています。

フォームからJavaScriptのコードが送信されたとします。

<script>alert('XSS!')</script>

Laravelの

e()

を利用してJavaScriptのコードを無害化することが出来ます。

$textarea = e(Input::get('textarea'));

$textareaをデータベースにinsertすると無害化された状態でデータが挿入されます。

&lt;script&gt;alert(&#039;XSS!&#039;)&lt;/script&gt;

e()で無害化していない場合はjsのままデータが挿入されるため、Viewで出力した際に、javascriptコードは実行されます。

View側で対策する

エスケープタグ

View側で出力する際にjsを無害化することも可能で、Bladeテンプレートのエスケープタグを使います。

{{{ }}}

実際には以下のように利用します。

<td>{{{$data->textarea}}}</td>

上のエスケープタグを使えば、仮にデータベース上に実行可能なjavascriptコードが保存されていたとしてもView側で出力する前に無害化することが出来ます。

エスケープタグの変更

Bladeテンプレートのエスケープタグは変更することが可能です。変更するためには、

Blade::setEscapedContentTags()

を利用して変更します。

app/start/global.php

に下のコードを追記します。

Blade::setContentTags('{{', '}}');
Blade::setEscapedContentTags('[{{', '}}]');

この変更により以下のエスケープタグでXSS対策を行うことが可能になります。

[{{ }}]

LaravelをWindowsにインストール
Laravel 定数の使い方

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

XSS対策 for Laravel の記事にコメントを投稿