2012-02-12 13 views
1

XSSを防ぐために、誤って入力されたものを表示する場合や以前に送信された値でフォームを再ペイントする場合と同様に、ユーザー入力を出力するたびに、htmlをエスケープする必要があります。それは右ではないでしょうhtmlescape/htmlspecialcharsを扱う場合

echo "the name which was supplied as {$_GET['company_name']} is not accepted" 

ようなものをやって、...そう

確かなことです。

代わりに、これを実行します。念頭に置いて

echo "the name which was supplied as " . htmlspecialchars($_GET['company_name']) . " is not accepted" 

は、ここに私の質問に来る;,あなたは$ _GET [「COMPANY_NAME」]が戻ってから始めたテキストボックスに表示する必要がある場合に何をすればいいですか?多分あなたが長すぎるので、あなたはその会社名を訂正してほしいでしょうか?

あなたははhtmlspecialcharsを使用した場合、およびCOMPANY_NAMEは& T ATと言った場合、&が脱出し、&アンプとして表示されているだろう。ではない?

このような状況にどう対処しますか?もちろん、誰かが言っているかもしれませんが、htmlspecialcharを使わないでください。そのまま返してください。

誰かが私たちにcompany_nameを送るかもしれませんが、それはテキストボックスを止めるためにjavascript onclickを開始し、そこからXSSを行うために慎重に作られています。

これらの状況では、どのようにhtmlescapeを処理しますか? history.go(-1)を使用するだけですか?

答えて

1

XSSの防止に関する詳細については、OWASP XSS prevention cheat sheetをご覧ください。

ブラウザがHTML(およびCSSなどの関連コンテンツ)をレンダリングするとき、ブラウザは異なるタイプの入力に対して異なるレンダリングコンテキストを識別します。各コンテキストには、スクリプトコードをいつ、どのように実行できるかについて、それぞれ異なるセマンティクスがあります。したがって、HTMLを扱うためのブラウザのルールは、JavaScriptのレンダリングに使用されるルールとは異なります。これはCSSのルールとは異なります。これは、XSSを防止しようとしている場合、信頼できないデータが格納されているコンテキストに非常に敏感でなければならないことを意味します。

PHPのようなサーバー側コードを使用して、 (フォーム入力の値を含む)、HTML属性のテキストをエスケープする必要があります。それはHTMLエスケープ引用符にPHPを伝えますので、

<input type="text" value="<?php echo htmlspecialchars($_GET['company_name'], ENT_QUOTES, 'UTF-8'); ?>" > 

「ENT_QUOTES」オプションが重要です:ページと仮定するとUTF-8エンコーディングを使用している、あなたのような何かをするだろうう。エスケープ引用符「は属性の「抜け出す」と「onclickの」のようなJavaScriptのイベントハンドラを追加するために使用することができますONFOCUS」など

あなたは 『& T』の例では、あなたが入力中&amp;は表示されませんボックス。このHTML属性の文脈の中で、あなたのブラウザはそれらに関連する文字(&のような)としてHTMLエンティティ(&amp;など)をレンダリングするためである。

テキストボックスに&amp;が表示される場合があります場合は?

の場合JavaScriptを使用して入力の値を変更した場合、ブラウザはさまざまなルールセットを使用して新しい価値が扱われます。HTMLのエスケープの場合は、 'AT & T'を入力して、その新しい値を次のように入力します。 yourInput.setAttribute(“value”, HtmlEscapingFunction('AT&T'))AT&amp;Tを参照してください。これは、DOM実行コンテキストで作業しているため、DOM実行コンテキストでは、属性値をエスケープするHTMLによってダブルエンコーディングが発生するためです。

関連する問題