2012-09-27 18 views
1

我對一個新項目使用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\\/\.\?=&amp;;#-~]+|#(\w)+)"/> 
<regexp name="offsiteURL" value="(\s)*((ht|f)tp(s?)://|mailto:)[A-Za-z0-9]+[~a-zA-Z0-9-_\[email protected]#$%&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字符]郎= EN insted的的 https://bla.bla.com/bla?frame=Frameset&lang=en

所以它似乎是一個編碼問題,該符號將不再是&符號。 怎麼能找出,我應該使用哪種編碼?

編輯:字符是E2 8C A9 - >⟨

回答

1

我已經做了與替換 「&」 一點解決辦法 「&安培;」。 我不知道爲什麼,但它有效。這是唯一無法正常工作的角色。