xss_sanatised
データベースに保存される前のモデルレベルのフィールドがあります。これを表示したい場合escape_javascript
、ビューにレンダリングする前にもう一度表示する必要がありますか?
私のクエリは次のようになります
User.all.pluck(:id, :name).map { id: id, name: escape_javascipt(name)}
の代わりに
User.all.pluck(:id, :name).map { id: id, name: name }
<script>alert('hi')</script>
データベースに直接挿入すると、実際にはUIで実行されました。SQLクエリを直接記述せずに、その値をデータベースに書き込むことはできませんが。
ではescape_javascript
、すべてのフィールドに使用する必要がありますか?
編集
これは、select2を使用してドロップダウンリストとしてUIに表示されます
<div input="hidden" id="input"></div>
jQuery('#input').select2({
multiple: false,
data: <%=tech.to_json.html_safe%>,
initSelection : function (element, callback) {
callback(<%= esc.to_json.html_safe %>);
}
});
データベースに直接書き込むことによって、独自のアプリケーションのサニタイズルールをバイパスしているという理由だけで、ここで混乱していると思います。
デフォルトでは、ユーザー入力を「信頼」してはなりません。常に潜在的に悪意のあるものと見なす必要があります。
あなたがそれを信頼することを選ぶかもしれない1つの理由は、それが内部ユーザー(例えばあなた自身!)によって供給されているかどうかです。
それとも、あなたがした場合、それがある信頼するように選択することも、別の理由、それをサニタイズそれを永続化する前に-つまり、あなたが明示的に潜在的に悪質な入力をブロックしています。
あなたの「と仮定xss_sanatised
」の入力が(あなたがコードを共有していなかったので、私は、確認できない)安全であり、そして、あなたがすることができ、安全なように、ユーザの入力を信頼しています。したがって、ブラウザに直接表示することは問題ありません。
ただし、「SQLクエリを直接書き込む」ことによってデータベースへの安全でない入力を手動で強制すると、当然、上記の「入力は安全である」という仮定は無効になります。しかし、これは「不可能な」シナリオなので、私が特に心配することはありません。
これについて本当に二重に安全にしたい場合は、入力をレンダリングする前に再サニタイズすることができます。しかし、私の意見では、これはおそらくやり過ぎです。(どちらの方法でも、一度だけ消毒する必要があります!)
escape_javascript
は別の方法であり、ユーザー入力のサニタイズとは関係ありません。これは、あなたが説明している問題とは無関係です。
escape_javascript
値を呼び出す必要がある場合は、それを選択してください。ただし、ビューレンダリングコードを共有していなかったため、実際に必要かどうかはわかりません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加