1

Djangoのドキュメントには、次のように書かれています。

Djangoテンプレートは、HTMLにとって特に危険な特定の文字をエスケープします。これはほとんどの悪意のある入力からユーザーを保護しますが、完全に絶対確実というわけではありません。たとえば、次のものは保護されません。

 <style class={{ var }}>...</style>

varが'class1onmouseover = javascript:func()'に設定されている場合、ブラウザが不完全なHTMLをレンダリングする方法によっては、JavaScriptが不正に実行される可能性があります。

どうすればこれを防ぐことができますか?

4

2 に答える 2

1

できることの 1 つは、変数クラスを許可しないことです。次のようなものを使用できます

<style class={% if class_foo %}foo{% elif class_bar %}bar{% else %}baz{% endif %}>...</style>

他の場所で xss を防ぐために利用できるフィルターもあります: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#std:templatefilter-escape

于 2013-03-02T06:00:31.830 に答える
1

私は Django に特に詳しくありませんが、彼らが指摘しようとしていたエラーは、属性値の周りに引用符がないことです。つまり、値の例のスペースが残りの文字列 ( onmouseover=...) を別の属性として解釈されます。代わりに、次のように引用符を付ける必要があります。

<style class="{{ var }}">...</style>

私の理解が正しければ、引用を妨げる可能性のあるすべての文字がエスケープされるため、これは安全です。その解釈を確認したい場合があります。たとえば、 を書き、 を に設定し<span title="{{ var }}">foo</span>てテンプレートを実行し、HTML で適切にエスケープされていること、および が元の文字でブラウザーに表示されることを確認します。foo<>"'&title

于 2013-03-02T06:37:44.407 に答える