【PHP】下らねぇ質問はID出して書き込みやがれ 98
■ このスレッドは過去ログ倉庫に格納されています
0028nobodyさん
2010/09/19(日) 14:18:30ID:d8+XLEjxーーーーーーーーーーーー
クロスサイトスクリプティングの解説記事でよく説明される「入力データチェックを厳密に」という表現から,
フォーム受付時のタイミングでサニタイジングを行うのかと思いがちである。
サニタイジングは(2)HTML生成時のタイミングで行うべきである。
次章「クロスサイトスクリプティング対策の詳細」で説明するが,
データを埋め込むHTML中の文脈に合わせて適切なサニタイジング手法を選択する必要があるからである。
また掲示板の例では,将来的にデータベースへの記事の書き込み手段として,メールによる投稿が導入された場合でも,
HTML生成時のタイミングでサニタイジングしていれば,
なんら手を加えることなく,いろんな入力源から入り込んでくるデータを漏れなくサニタイジングできる。
また,同じデータに誤って2回以上サニタイジングしてデータの意味が変わってしまうという設計上のトラブルも防げる。
ソース
http://www.asahi-net.or.jp/~wv7y-kmr/memo/php_security.html#PHP_Session_about
今はデータベースに入れる前に、こんな感じで、
function delete_tag_changing_line($str){
$str=strip_tags($str);
$str=htmlspecialchars($str,ENT_QUOTES,"SJIS");
return str_replace(array("\r\n","\r","\n","\"","\'"),'',$str);
}
$hoge=delete_tag_changing_line($_GET['hogehoge']){
って感じでエスケープしてるんだけど,
上の記事見ると、print関数とかのhtml出力時にエスケープすべきみたいなんだよね。
でも、正直今の設計上で出力時に全部エスケープすると、かなりソースに変更が必要になってしまうです。
だから、今まで通り
$hoge=delete_tag_changing_line($_GET['hogehoge']){
このやり方で、リクエストのフォームデータを扱う時にエスケープかける方向でいきたいんだけど、
>同じデータに誤って2回以上サニタイジングしてデータの意味が変わってしまうという設計上のトラブルも防げる。
>メールによる投稿が導入された場合でも,
ここら辺が問題なければ、現状通りのやり方でも大丈夫かな。
お手間かけてすみませんが、見解聞かせてください。
■ このスレッドは過去ログ倉庫に格納されています