PHPのhtmlspecialcharsにはENT_QUOTESを付ける
2008年01月31日
htmlspecialchars ( ) でセキュリティ対策( ENT_QUOTES もね!)
PHPのhtmlspecialcharsにはENT_QUOTESを付ける。
htmlspecialchars でXSS対策をしていたと思ったら、デフォルトでは シングルクオートをエスケープしてくれない(マニュアル参照)
htmlspecialchars($str, ENT_QUOTES);
ENT_QUOTES を指定することで、シングルクオートも ' にエスケープ出来ます。
ZAPAブロ〜グのZAPAさんの指摘するh関数を定義してフレームワークなどに組み込んでおくのがスマートなのかもしれませんね→htmlspecialchars関数を簡単にする意外に知られていないかもしれないので、念をのため紹介しておきます。(知っている人はごめんなさい)
その危険な例をしめしてみます。
例えば、htmlspecialchars した値は安全だとして、Smarty などで次のように値を割り当てたとすると危険です。
<a href="http://phpspot.net/php" onclick="javascript:alert('{$assigned}');">test</a>
例えば、$assigned 変数に、「');alert(document.cookie+'」なんていう値がはいっていたらcookieがalertされてしまいます。
<>だけエスケープしておけば大丈夫、ということはいえなくなってしまいます。
というわけで、htmlspecialcharsを使う際にはENT_QUOTESを第二引数に渡さないといけません。
上記は誤りなので訂正いたします。(2008/04/16)
追記訂正) alert関数の呼び出しで、alert('');alert(document.cookie+''); だと document.cookie がアラートされてしまいます。
javascript 関数の文字列内のエスケープを行う際、シングルクオートは、\' のようにエスケープする必要があります。addslashes 関数などを使って ' → \' にする必要があるようです。
詳しくは、追記エントリにて。
関連エントリ
投稿者 KJ : 2008年01月31日 10:05
|
![]()
間違いの指摘をしていただける方はメールでお願いします
最新のブログ記事
- Firefoxでモバイルサイトの動作確認「FireMobileSimulator」
- 2008年9月5日 管理人のブックマーク
- tableタグで画像を描くPHPクラス
- ブラウザの使用時間を計れるFirefox拡張「TimeTracker」
- ActionScript3で曲げたりうねらせたりする物理ライブラリ「as3dmod」
- 2008年9月4日 管理人のブックマーク
- シンプルなUIアイコンセット「Simplicio」
- jQueryを使ったアプリのユニットテスト「QUnit」
- Photoshopで漫画エフェクトを与えるチュートリアル20
- 2008年9月3日 管理人のブックマーク
- リンクしたファイルに自動でファイルサイズを付ける「addSizes.js」


















