どうも、シローです。
今回はクロスサイトスクリプティング攻撃とPHPによるその対策の話をしようと思います。
クロスサイトスクリプティング(XSS攻撃)とは
クロスサイトスクリプティング攻撃とはユーザ投稿型のサイトなどで悪意のあるスクリプトを埋め込む攻撃です。
例えば掲示板の入力フォームに以下のようなJavaScriptのコードを入力するとします。
1 |
<script>while(1){ alert('(^^;)'); }</script> |
HTMLこのコードを読み込んでページのソース内の一部にすることで、この場合は無限にアラートが出てしまい。
掲示板が使えなくなってしまいます。
このように、ユーザ入力を受け付けるアプリケーションではユーザが悪意のあるコードを入力してそれを実行させ、
他のユーザに危害を加えることがデフォルトではできてしまいます。
対策
XSS攻撃の具体的な対策は
- HTMLタグをエスケープして文字列にしてDBに登録
- DBに登録した文字列のHTMLタグをエスケープしてビューに表示
です。
PHPではhtmlentities()関数があり、HTMLタグをエスケープすることができます。
以下がその例です。
1 2 3 4 5 6 7 8 9 10 11 |
<?php if ($posts !== false && count($posts) > 0): ?> <ul> <?php foreach ($posts as $post) : ?> <li> <?php echo htmlentities($post['name'], ENT_QUOTES, 'UTF-8'); ?>: <?php echo htmlentities($post['comment'], ENT_QUOTES, 'UTF-8'); ?> - <?php echo htmlentities($post['created_at'], ENT_QUOTES, 'UTF-8'); ?> </li> <?php endforeach; ?> </ul> <?php endif; ?> |
画面出力
これで無事、悪意のあるコードもただの文字列として出力されました。
くれぐれも、掲示板で悪意のある攻撃はしないように、犯罪です。
参考