1

xssの脆弱性を防ぐために、新しいプロジェクトにantisamyを使用しています。このアプリケーションでは、ユーザーは単純な(ansiエンコードされた)Excelファイルでコンテンツをアップロードできます。一部のhtmlを挿入することは可能ですが、javascriptなどを挿入することはできません。

antisamyを使用して入力をスキャンすると、次のエラーが発生します。タグに処理できない属性が含まれていました。href属性の値は「https&#5 8;&#4 7;&#4 7; bla&#4 6; bla&#4 6; com&#4 7; bla/...」でした。この値は、セキュリティ上の理由から受け入れることができませんでした。入力の処理を続行するために、タグをフィルタリングすることを選択しました。

あなたがそれを見ることができるように、私はエンティティにいくつかのスペースを追加しました。

(ただし、 https://bla.bla.com/bla/のようになります...)

コードを介してデバッグすると、「汚染されたHtml入力」とそのhref属性が正しいように見えます(したがって、Excelファイルのエンコードに問題はありません)。

antisamy-policyファイルは次のようになります。

...
<regexp name="onsiteURL" value="([\w\\/\.\?=&amp;;#-~]+|#(\w)+)"/>
<regexp name="offsiteURL" value="(\s)*((ht|f)tp(s?)://|mailto:)[A-Za-z0-9]+[~a-zA-Z0-9-_\.@#$%&amp;;:,\?=/\+!]*(\s)*"/>
...
<attribute name="href">
  <regexp-list>
    <regexp name="onsiteURL"/>
    <regexp name="offsiteURL"/>
  </regexp-list>
  <literal-list>
    <literal value="javascript:void(0)"/>
  </literal-list>
</attribute>
...

また、正規表現パターンをテストしましたが、リンクは有効だと思いました。もちろん、htmlエンティティによってエンコードされている場合はそうではありません。

だから問題は何ですか?

よろしくお願いします


AntiSamyコードを少しデバッグしたところ、問題が発生しましたが、問題を解決できません。htmlentitiesは、検証後にantisamyによって追加されました(HTMLページに印刷する場合)。しかし、私の入力は、AntiSamyライブラリのorg.cyberneko.html.parsers.DOMFragmentParserによって、次のステートメントで解析されます。parser.parse(new InputSource(new StringReader(html))、dom); 私のタグでは、href属性に次のようなものが含まれています:https://bla.bla.com/bla?frame = Frameset [undefinable character] lang = en insted of https://bla.bla.com/bla?frame = Frameset&lang = en

したがって、アンパサンドがアンパサンドではなくなるというのは、エンコーディングの問題のようです。どのエンコーディングを使用すべきかをどのように見つけることができますか?

編集:キャラクターはE28CA9->⟨

4

1 に答える 1

1

「&」を「&amp;」に置き換えることで、少し回避策を実行しました。理由はわかりませんが、機能します。そして、これは正しく動作しない唯一のキャラクターです。

于 2012-10-05T06:45:05.863 に答える