gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

「サニタイズじゃなくてエスケープなんだ」と何度言えば…orz

元ネタ列挙。


PHPでのセキュリティ対策についてのメモ
http://note.openvista.jp/2008/php-security-memo/#2
XSS対策に入力時エスケープは非常にややこしい
http://ukstudio.jp/2008/10/27/xss/
XSS脆弱性を限りなくなくす方法
http://blog.webcreativepark.net/2008/10/24-201629.html


相変わらず軽微なところから。
http://ukstudio.jp/2008/10/27/xss/

入力時エスケープは非常にややこしい
確かに、入力値に必ずエスケープしておけば、XSS対策漏れにはなるかもしれない。けれど非常にややこしいことになる。

その代わり違う脆弱性がだだ漏れになる事も多々。

ちなみにフレームワークやテンプレートエンジンが出力時のエスケープをデフォルトで行なうってのは賛成です。なぜなら使っているフレームワークまたはテンプレートエンジンがエスケープしているということが自明なら、エスケープの有無を確認する必要がなくなるから。

概ね賛成。…どうしようMagicWeaponの置換エンジンのデフォルト、secure_convにしちゃおうかしらん?


次。
PHPでのセキュリティ対策についてのメモ
http://note.openvista.jp/2008/php-security-memo/#2
丁寧に駄目な事が書いてあり過ぎて…突っ込む気力無くなった orz
とりあえず各地で突っ込まれてるっぽいのと、筆者がそれなりにちゃんと耳を傾けてるっぽいので。
状況が改善されることを祈っております。


ラスト。…いきなり角度を急に。
http://blog.webcreativepark.net/2008/10/24-201629.html

対応方法は、PHPファイルの最初に以下のコードを挿入するだけ。

foreach($_GET as $key => $value){
$_GET[$key] = htmlspecialchars(htmlspecialchars_decode($value,ENT_QUOTES),ENT_QUOTES);
}
foreach($_POST as $key => $value){
$_POST[$key] = htmlspecialchars(htmlspecialchars_decode($value,ENT_QUOTES),ENT_QUOTES);
}

これで自動的にエスケープの処理を行ってくれます。

やめろ。こういう駄目知識を広げるな。
対策漏れ云々いうけど。ンなものは「随所に関所」パターンで簡単に駆逐可能なので。
どこぞの台詞ではないですが。「テストで0点をとって怒られるのをどうやって言い訳しようか考えるヒマがあるんならその前に勉強して0点を回避しろ」。
以上*1


…うん確かに、XSS一つとっても色々厄介事がないとは思いませんが。
基本的には「一回文字コード変換しておかしなバイナリを問答無用で除去して」「出力のタイミングで適切に、出力に見合ったエスケープをすれば」それでいいだけだと思うんだけど…なぜそんな単純な話がここまで混迷するんだろう?
で。「基本だけじゃ除去できない厄介な脆弱性」を、議論の俎上に載せりゃいいと思うのですがねぇ。


個人的には。「守破離」とかいいながら、もうちょっと真摯な「態度で」学んで欲しいなぁと感じる今日この頃です。

*1:「赤ペンキ缶レベル」認定