2012-01-18 14 views
3

PHPでhtmlentities()のような関数を使用して、ユーザの入力をサイトに表示するときにユーザ入力をサニタイズすると便利です。しかし、このような何かがXSSのリスクを提示するでしょうか?テキスト化されていないユーザー入力をテキスト入力に入れてしまうXSSリスクはありますか?

<input type="text" value="<?=user input drawn from the database?>" /> 

このような入力をサニタイズする方が良いでしょうか?

<input type="text" value="<?=htmlentities(user input drawn from the database)?>" /> 

私は唯一の入力値属性のセキュリティ上のリスクについて話して、私は、サイト上の他の場所にそれを表示したい場合、私はまだユーザー入力をサニタイズする必要があります知っていることを指定する必要があります。

+2

エンコーディングを 'htmlentities'に指定しないと、危険性があります。 (なぜ誰も 'htmlspecialchars'の代わりに' htmlentites'を使うのですか?) –

+0

'<?php print htmlspecialchars($ string、ENT_QUOTES、 'UTF-8'); ?> htmlspecialchars($ string) 'と' htmlentities($ string) 'はユニコードの可能性を示します。 – Xeoncross

答えて

3

私はこのようなテキスト、あなたの次の出力を与えるだろう

escape!" /><script>alert("I escaped, because you didn't escape!");</script><img src=" 

入力することができます:あなたは、文字列のない連結されている(読みやすくするためにフォーマット済み)

<input type="text" value="escape!" /> 
<script> 
    alert("I escaped, because you didn't escape!"); 
</script> 
<img src="" /> 

をDOMを操作するので、引き続き引用符を注意する必要があります。

1
But would something like this present an XSS risk? 

はい、そのようなことは、それをデータベースに挿入する前に限り、データがすでにをサニタイズされていないとして、XSSのリスクを提示します。

Would it be better to sanitize the input like this? 

はい、ウェブページに表示する前にすべてのユーザー入力をサニタイズするのは簡単です。また、htmlspecialchars()

+0

htmlが処理されないと、XSSのリスクが発生するのはなぜですか?たとえば、テキスト入力値を「サンプルテキスト」に設定すると、入力ボックスには**サンプルテキスト**ではなく、そのままテキストが表示されます。 –

+0

ああ、今すぐお手伝いしましょう! –

2

の可能性があります。データベースからのユーザー入力は二重引用符で囲まれている可能性があります。

引用符を変換するには、htmlentities($str, ENT_QUOTES);を使用する必要があります。

http://php.net/manual/en/function.htmlentities.php

関連する問題