2012-03-26 9 views
0
$text = "(= \" ' & \\ </textarea> : ; . " ; 

echo htmlentities($text); 

//outputs as -->>  (= &quot; ' &amp; \ &lt;/textarea&gt; : ; . 

//obviously, htmlentities does nothing to () = ; and . 

htmlentitiesは優れた防衛線ですが、JavaScriptのコンテキストでは役に立ちません。XSSとhtmlentities

さらに、強制的に()を使用する独自のhtmlencode関数を記述することはできません。 ;と=エンコーされる文字も同様ですか?

このように、1つの機能を使用すると、全体を安全にすることができます。私はそのアプローチに問題があるかどうか聞いてみたい。

次の4文字のいずれかを使用せずにあなたに危害を加える可能性のあるjavascriptは、(。); =。

+0

ユーザが生成したコンテンツを「

0

あなたは、コンテキストに基づいて異なるエンコーディングを必要とします。すべてを一度に処理できる「普遍的な」エンコーダはありません。それは、彼らがで解釈している状況だが、危険な文字ではありません。JavaScriptで

値は(addslashes()のような他の機能はすべてのエッジケースを処理しません。HTML <script>で要求されるようjson_encode</をエスケープ)json_encode($value)が必要です。

HTML属性のJavaScriptの値は、両方ともが必要です:htmlspecialchars(json_encode($value))、構文の各「レイヤー」はデータを解釈するときに独自のデコードを行うためです。