2017-07-06 12 views
0

これはもっと基本的な質問かもしれませんが、自分のJavaScriptページのデータベースにアクセスするコントローラからJSON文字列にアクセスしています。私は{JSENCODE(jsonString)}がXSSの脆弱性に注意するようにするため、ユーザーはJSON内のオブジェクトの名前を指定します。XSSの脆弱性を回避するには一重引用符で囲みますが、ユーザーは入力にそれらを使用できますか?

JSENCODEを実行しているときに、シングルクォートがエスケープされます。それからJSON.parse()しようとすると、\ 'は無効な文字としてエラーをスローします。 \ 'を\で置き換えるとエラーは発生しませんが、一重引用符(アポストロフィで使用)ではなくオブジェクト名のリストに\'として表示されます。

XSSの脆弱性を回避しながら、ユーザーがこれらのオブジェクトの名前に一重引用符を使用できるようにするには、どのような行動をとるべきでしょうか?

答えて

0

データを取得してJSONに変換し、それを<script>要素の文字列リテラルに注入し、結果の文字列をJSONとして解析しようとしているようです。

問題は、JSONの特殊文字もJavaScriptの特殊文字です。

JSONはJavaScriptのサブセットであるため、JavaScriptリテラルのように使用できます。

<script> 
    var data = {!JSENCODE(jsonString)}; 
    console.log(data); 
</script> 
+0

まあ、jsonStringはJSONのシリアル化されたリストですので、JavaScriptから解析する必要があります。 {!JSENCODE(jsonString)}を実行するだけで、文字列を取得できます。 –

+0

@TylerDahle - それを二重にエンコードしないでください。ちょうどそれを使用します。 – Quentin

+0

セキュリティチェックでXSSの脆弱性が指摘されましたが、私は考えています...一重引用符が二重引用符で囲まれていると、実際には脆弱ですか?もしそうでなければ、JSENCODEの必要はありません。 –

関連する問題