7

HTMLエンティティにApacheを使用していStringEscapeUtilsますが、HTML属性値をエスケープしたい場合、これを行う標準的な方法はありますか? escapeHtmlこの関数を使用しても問題は解決しないと思います。そうしないと、なぜOwasp Encoder インターフェースにこれに対処するための 2 つの異なるメソッドがあるのでしょうか?

HTML属性とエンティティのエスケープに何が関係しているのか、Owaspライブラリを手元に持っていない場合に属性エンコーディングについて何をすべきか知っている人はいますか?

4

1 に答える 1

10

これは、OwaspのXSS防止に関するチートシートのルール#2のようです。が言っているビットに注意してください:

適切に引用された属性は、対応する引用でのみエスケープできます

したがって、属性が二重引用符または一重引用符で正しく囲まれ、これらをエスケープする限り(つまり、二重引用符( ")は"になり、一重引用符(')は'(または'))になります) Apacheは一重引用符(')をエスケープしないため、このタスクには不十分StringEscapeUtils.escapeHtmlであることに注意してください。これを行うには、Stringのメソッドを使用する必要があります。replaceAll

それ以外の場合、属性が記述されている場合:<div attr=some_value>そのページの推奨事項に従う必要があります。

&#xHH;を使用して、ASCII値が256未満のすべての文字をエスケープします。属性の切り替えを防ぐためのフォーマット(または使用可能な場合は名前付きエンティティ)

ただし、これの非Owasp標準実装があるかどうかはわかりません。ただし、とにかくこの方法で属性を記述しないことをお勧めします。

これは、標準の属性値を入力する場合にのみ有効であることに注意してください。属性がhrefまたはJavaScriptハンドラーである場合は、別の話になります。イベントハンドラ属性内の安全でないコードから発生する可能性のあるXSSスクリプト攻撃の例については、http://ha.ckers.org/xss.htmlを参照してください。

于 2012-03-01T14:08:47.243 に答える