2016-07-03 20 views
0

だから私はしばらくこのことに固執しています。私はMongoDBを持っています。私はそれを照会してJSONとして返します。JSONをフラスコからテンプレートに渡し、htmlエンティティをデコードします

私はこれを行う:私は、HTMLのインラインjsのスクリプトで使用するためにフラスコのテンプレート変数にこれを渡し

bson.json_utils.dumps(list(all_exams.find(query)) 

<div id="results"> 
    <table id="results-table"> 
    </table> 
    <p> 
    {{results_json}} 
    </p> 

</div> 


<script type="text/javascript" charset="utf-8"> 
$('#results-table').dynatable({ 
dataset: { 
    records: {{results_json}} 
} 
}); 
</script> 

問題は、それは二重引用符のための実体値であるが、私はソースを調べている場合、それはそのように表示されなくてはならない&#34;が含まれているので、スクリプトでは、JSONが適切denotableによって解析することができないということですコード。 htmlページには"と表示してはいけません。これはスクリプトセクションでのみ発生します。 <p>タグにはありません(&#34;はすべて"と表示されます)。

私は何を誤解していますか? XSS攻撃、フラスコや他のテンプレート言語を避けるために

答えて

1

は、デフォルトで値をエスケープ:ブラウザが人間のために表示されるテキストではなく、HTMLの構文(例えばの一部としてそれを読み取るように、それは、HTMLエンティティに"を変換<a href="..."> )。これはすべてのタグで発生します:<p>タグの中にあなたのブラウザの見積もりが表示されますが、ソースコードはまだエンティティです。

フラスコに物を逃がさないように指示するには、{{results_json | safe}}を使用してください。それは値が安全であると主張しています。フラスコにそれを安全にするよう指示するのではありません。

+0

ありがとうございます。私はあまりにも長い間これに固執してきた! – trivk96

関連する問題