PHPとCGIのXSSクロスサイトスクリプティング対策関連

このエントリーをはてなブックマークに追加

「はてな」界隈で只今なにかとおさがわせ話題の「えがちゃん」ことエガミさん。様々なコンテンツを発表して注目されていたのだけれど、そのPHPなどの脆弱性についても指摘が多いようですね。

これはえがい人の脆弱性

ただそれは「クロスサイトスクリプティング(XSS)」という問題に対処出来ていなかったからだけど、少しその方法に困ったらしく助言(というか全部直してもらう)を求めていたようだ。

エガミくんの脆弱性のやつ
Re:Re:Re:Re:Re:Re:エガミくんの脆弱性のやつ

htmlspecialchars関数と「HTMLの中をちゃんと "" で囲む」というのができていなかったらしい。

APIが使えて、こういう基本的なものが分からなかったというのは若者らしいとは思いつつ、基本的な事を再確認させてくれたのかなってことで。

PHPだとhtmlspecialchars関数いがいにも色々対処法があるらしいので以下にそのリンク先。
スポンサード リンク
PHPでのセキュリティ対策についてのメモ - Liner Note
入力時エスケープ処理に対する方法と是非
XSSの脆弱性を限りなくなくす方法[to-R]
水無月ばけらのえび日記:「入力時に文字参照に変換するのがよろしくない理由」
UK STUDIO:XSS対策に入力時エスケープは非常にややこしい


PHP: htmlspecialchars - Manual
htmlentities()
配列データに一気にhtmlspecialcharsをかける - phpspot


strip_tags(文字列からHTMLおよびPHPタグを取り除く)なんてのもあるけど、注意した方が良さそうではある。
文字列からタグを取り除く関数 - phpspot


ところでココまでPHPについての対処法ですけど、CGIの場合にも起こりうる訳で対処をしないといけない。

いわゆる「タグ除け」の処理でいいのカナ?

■CGIの場合のタグ除けの例

#タグ除け
   $com = ~s/   $com = ~s/>/> /g;


他に「tag_change関数」とかも。

不正なタグの除去
■tag_change関数
sub tag_change {
local($_) = $_[0];
1 while s/(.*)(<(img([!-:A-~\s\=]+))>)/$1<img$4>/i;
1 while s/(.*)(<(font[\s\w\=\#\"\']+)\>(.*)\<\/font\>)/$1<$3>$4<\/font>/i;
1 while s/(.*)(<(b)>(.*)<\/b>)/$1<b>$4<\/b>/i;
1 while s/(.*)(<(i)>(.*)<\/i>)/$1<i>$4<\/i>/i;
$_;
}


便利なサブルーチン関数集

スクリプトのソースコードを眺めていると分かってくる事もある。

返信機能付き掲示板】[ソースコード]
プログラミングコンテスト】[ソースコード]

他のCGIに置けるタグ除去の方法

HTMLタグを取り除く - にししの Perl/CGI Tips ふぁくとりー
HTML-TokeParser-Simpleを使ってHTMLタグを除去する - TechMemo
HTML文字列からJavaScriptタグなどを除去する、nsIScriptableUnescapeHTML - FAX


■クロスサイトスクリプティング関連
クロスサイトスクリプティング - Wikipedia
対策
クロスサイトスクリプティングの対策は、いくつかの例外を除き、出力値のエスケープを適切に施すことである。
HTMLの実体参照を用い、& を & に、< を < に、> を > に、" を " に、それぞれ置換する。
タグの属性値は必ず "〜" (ダブルクオート)で括る。また属性値中のエスケープを忘れない。例:
例外は以下のような場合である。
入力値をURIとして用いる場合(リダイレクタなど)
許可するスキームを定め、それ以外のスキームを持つURIは拒否する。
入力値をスタイルシートとして使用する場合
許可する構文を定め、それ以外の使用は拒否する。スタイルシート中のスクリプト起動方法は多様であり、ブラックリスト方式で完全に抑制することは難しい。
入力中の一定のタグをHTMLとして反映したい場合(例: ウィキ)
ホワイトリスト(許可リスト)を使用した出力タグ、あるいは属性の制限を行う。制限には上述のURI中のスキーマ制限や、スタイルシートへの制限を当然に含む。

@IT:クロスサイトスクリプティング対策の基本

「XSS脆弱性は危険,Cookieを盗まれるだけでは済まない」専門家が注意喚起:ITpro
 もちろん,Cookieを盗まれることもリスクの一つである。しかしそれよりも,「XSS脆弱性が存在するサイト上に,偽のログイン画面や個人情報入力画面を作られることのほうが深刻だ」(徳丸氏)。フィッシング詐欺への悪用である。


もし他に考えうる対策や問題があれば教えてください。
ブックマークに追加する
2008/10/29(Wed) 10:40:36 | Web制作

New Entries

スポンサード リンク

Link

Comment

Categories

Archives(107)

Search

Profile