2011-02-05 7 views
1

可能性の重複:たとえば
What are the best practices for avoid xss attacks in a PHP siteクエリ文字列に<script>要素を配置するXSS攻撃を防止するにはどうすればよいですか?

http://www.mid-day.com/searchresult.php?query=%3Cscript%3Ealert%28%22This%20is%20vulnerable%20for%20XSS%20..%20by%20binny%22%29%3C/script%3E 

当サイトはXSSのDOMベースの私は、この脆弱性の原因を知りたい脆弱性とどのように予防する方法がありますそれ?

+0

さらに可能な重複:http://stackoverflow.com/search?q=xss+php – Gordon

+1

サイドノートでは、関連するコードの部分を質問に入れると、特定のサイトの回答を得ることができますコードパッド、またはペーストビン)の代わりに、人々が短いリンクをたどることを期待する代わりに、神がどこにいるかを知っている。 – Gordon

答えて

3

出力する前に、クエリーストリングのパラメータのようなユーザーからの値を常にHTMLエンコードする必要があります。 htmlentities機能を使用できます。

の代わりに:

$str = $_GET['a']; 
echo $str; 

使用:あなたはHTML Purifierのために行くことができ

$str = $_GET['a']; 
echo htmlentities($str); 
1

HTML清浄機は、PHPで書かれた標準に準拠した HTMLフィルタライブラリです。 HTML清浄機だけまだ許容ホワイトリストを確保
、徹底的に監査を受けて(より良い XSSとして知られている)すべての 悪質なコードを削除しないであろう、それは はまたあなたの文書が 標準に準拠していることを確認します、とだけ 達成可能なもの包括的な W3Cの仕様の知識。

組み込みのPHP関数は、このようなオープンソースソリューションが必要だったあらゆる種類の攻撃に対応していません。私はまた、あなたが見てみましょうすることをお勧め

3

あなたは$ _REQUEST、$ _POST、$ _GET、あるいは$ _SERVER変数であるものを直接エコーすることはありません。

あなたはこのようなものがある場合:

index.php?text=hai

を、あなたが言う:

echo $_GET['text']

それは安全ではありません。あなたがそこにスクリプトを置くか何か場合 :

index.php?text=<script>alert(document.cookie);</script>

それは、文書のクッキーを表示します。本当に安全ではありません。

あなたが何かを提出すると、同じことが$ _REQUESTと$ _POSTとなります。そして、$ _SERVER [ 'THIS_URI'] ...

index.php?url=<script><!-- something --></script>

、あなたが

<form action="<?php echo $_SERVER['THIS_URI']; ?>">を行うと、あなたはXSSがあまりにもハック得ます。

いつもhtmlentities($string)とMySQLクエリmysql_real_escape_string($string)を使用します。

ご挨拶。

関連する問題