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