Rails アプリケーションで .js.erb
ファイルをレンダリングしています。このファイルでは、選択ボックスのオプションを更新しています。
最も重要なことは、XSS 安全な方法で実行することです。このスタック オーバーフロー ソリューションに基づいて、OWASP DOM ベースの XSS 防止チートシートを參照して、次の方法で選択ボックスのオプションを更新します。
1つ試してみる リーリー
の表示テキストは HTML エンコードされています。たとえば、「Johnson & Johnson」のテキストは「Johnson
& Johnson」となります。アポストロフィなどの他の特殊文字にも同じ表示の問(wèn)題が発生します。
2 つ試してみる
Rails にhtml_safe メソッドがあることは知っていたので、それを使ってみました。
"<%= blog.name %>"; を
" < ;%= blog.name.html_safe %>";。
を
alert("Gotcha"); に設(shè)定して XSS をテストすると、次のエラーが表示されます: option at all has更新されていません。結(jié)局のところ、問(wèn)題は、このコンテキストで
html_safe を使用すると、アプリケーションが二重引用符をどうすればよいのかわからないことのようです。
3 つ試してみる
この方法は効果的だと思われます。オプションが更新され、表示テキストは正常に機(jī)能しますが、表示テキスト alert("gotcha"); を持つオプションはテキストとして表示されるだけで、コードとして実行されません。
リーリー
escape_javascript
のエイリアス) は安全ではないという記事を見(jiàn)たので、よくわかりません。
テンプレートから選択オプションを更新する方法が不明です。
私の理解を伝えてみてください:
特殊文字を デコードすることはできますが、これは Rails の方法ではありません。
html_safe は文字列の結(jié)果が安全であることを保証しませんが、文字列內(nèi)の HTML タグを HTML 形式で表示できるように文字列が安全であることを明示的に指定しているため、問(wèn)題は解決されません。 XSS の問(wèn)題。 リーリー
によると、escape_javascript を一重引用符または二重引用符で囲んで使用しても安全です。
リーリー
したがって、試行 3 は XSS 安全で Rails の方法であるため、推奨されます。
コードは次のように簡(jiǎn)略化できます:
リーリー