なぜPHPアプリにセキュリティホールが多いのか?
第8回 クロスサイトスクリプティング対策の落とし穴
今回は熟練したWebアプリ開発者なら常識のクロスサイトスクリプティング対策の落とし穴を紹介します。
JavaScriptを排除しているつもりで排除に失敗?!
最近はSanitize
例1 "<"と">"をereg_
$safe_text = ereg_replace($_GET['text'], '[<>]', '');
この$safe_
<a href="/script.php?text=<?php echo $safe_text ?>">
と出力するとXSSに脆弱になります。 $safe_
" onmouseover="javascript: alert('XSS')
と設定されている場合,
$safer_text = eregi_replace($safe_text, 'javascript', '');
$safer_
例2 javascript以外でJavaScriptと認識する文字列
java\0script
(IE6.
jav	ascript
(IE6.
このほかにも,
さらに上記以外にも,
例3 onmouseover属性でJavaScriptを実行
<b onmouseorver="alert('XSS')">XSS</b>
例4 動的にサーバ側で生成された.js
q = <?php echo $_GET['q'] ?>;
document.writeln(q);
※JavaScriptのみでも同様の脆弱性を発生させるコードも記述できる
このようにサニタイズにより安全性を保証したつもりでも実際には安全になっていないケースは数多くあります。
$safe_
サニタイズ処理の問題
サニタイズ処理には2つの大きな問題があります。
- ブラックリスト方式である
- 不正な入力でもエラーにならない
ブラックリスト方式とは,
Webアプリケーションに限らず一般的なアプリケーションは,
バリデーション処理をしよう
Webアプリケーションはサニタイズではなくバリデーション処理を行い,
Webアプリケーション開発フレームワークを使っているから安全!?
Webアプリケーション開発フレームワークはWebアプリの安全性を向上させるには非常に有用です。しかし,
例5 フレームワークではecho/
<?php echo $_GET['q'] ?>
仮にすべての出力にフレームワークの機能を利用したとしても,
まとめ
クロスサイトスクリプティングはWebサーバ側のプログラムだけでは対処できません。アプリケーション/
この記事に関連する書籍
-
Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?
本書は,Webサイトのセキュリティ確保のために必要な基礎知識と,安全なコードを書くために必要な基礎知識を解説しています。Webアプリケーションは比較的簡単に作成で...
-
はじめてのPHP言語プログラミング入門
Webアプリケーション構築ツールとしてPHPを取り上げた書籍は数多くありますが,言語の解説・入門書としての書籍はあまりありません。 本書は,プログラミング言語として...
バックナンバー
なぜPHPアプリにセキュリティホールが多いのか?
- 第46回 セキュリティ対策を考える上で欠かせないコンテクスト
- 第45回 入力バリデーションはセキュリティ対策
- 第44回 セキュリティ対策が確実に実施されない2つの理由
- 第43回 PHP 5.3のcrypt関数の問題
- 第42回 PostgreSQL 9.0に見るSQLインジェクション対策
- 第41回 PHP 5.3.4におけるセキュリティ上重要な仕様変更
- 第40回 MOPS:安全性の高いパスワードハッシュ作成ツール - phpass
- 第39回 MOPS:静的PHPソースコード脆弱性スキャナ RIPS
- 第38回 MOPS:PHPにおけるコード実行(2)
- 第37回 MOPS:PHPにおけるコード実行(1)