2

Chameleon テンプレートは、変数の XSS および HTML タグをエスケープ/削除しますか? 以下は安全でしょうか?

<script type="text/javascript">

    var initialComments = ${comments};
    for (var i = 0; i < initialComments.length; i++) {
        initialComments[i].userId = initialComments[i].user_id;
    }
    var post = ${post}
    // ...

</script>
4

2 に答える 2

1

カメレオン紹介ページより:

デフォルトでは、文字列は挿入前にエスケープされます。これを避けるには、structure: プレフィックスを使用します。

ただし、これはJavaScriptの値をエスケープしません。そのために JSON を使用します。あなたの見解では、以下を使用してください:

post_json = (json.dumps(post)
    .replace(u'<', u'\\u003c')
    .replace(u'>', u'\\u003e')
    .replace(u'&', u'\\u0026')
    .replace(u"'", u'\\u0027'))

HTML セーフなJSON 文字列を生成する。JSON (json.dumps()少なくとも1によって生成される) は Javascript サブセットであり、ここでは HTML で危険な文字がエスケープされています ( Flaskjson.htmlsafe_dumps()関数のおかげで)。

以下を使用して、それをテンプレートに補間しますstructure

<script type="text/javascript">

    var initialComments = ${comments};
    for (var i = 0; i < initialComments.length; i++) {
        initialComments[i].userId = initialComments[i].user_id;
    }
    var post = ${structure:post_json};
    // ...

</script>

1 JSON はU+2028 および U+2029 文字を許可しますが、json.dumps()関数はデフォルトですべての非 ASCII コードポイントをエスケープします。

于 2014-04-09T11:12:33.807 に答える