我對一個新項目使用antisamy來防止xss vunerabilities。 在應用程序中,用戶可以通過簡單的(ansi編碼的)excel文件上傳內容。 應該可以插入一些html,但不可以插入javascript等等。DOMParsing編碼(Antisamy)
當我用antisamy掃描我的輸入時,出現以下錯誤: a標記包含一個我們無法處理的屬性。 href屬性具有「HTTPS &#5 8的值; &#4 7; &#4 7; BLA &#4 6; BLA &#4 6; COM &#4 7; BLA &#4 7; .. 「。出於安全原因,此值無法接受。我們選擇過濾標籤以繼續處理輸入。
我在實體中添加了一些空格,您可以看到它。
(但它應該是這樣https://bla.bla.com/bla/ ...)
當我調試通的代碼中,「污點HTML輸入」和它的href屬性似乎是正確的(所以用的編碼沒有問題excel文件)。
的antisamy政策文件看起來像這樣:
...
<regexp name="onsiteURL" value="([\w\\/\.\?=&;#-~]+|#(\w)+)"/>
<regexp name="offsiteURL" value="(\s)*((ht|f)tp(s?)://|mailto:)[A-Za-z0-9]+[~a-zA-Z0-9-_\[email protected]#$%&;:,\?=/\+!]*(\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字符]郎= EN insted的的 https://bla.bla.com/bla?frame=Frameset&lang=en
所以它似乎是一個編碼問題,該符號將不再是&符號。 怎麼能找出,我應該使用哪種編碼?
編輯:字符是E2 8C A9 - >⟨