2013-11-02 74 views
2

在我的博客,我讓用戶提交這樣<a href="$">link text</a>無論他們投入將保持的「href」內部鏈接僅屬性,即使他們嘗試關閉「或>我用html_entity_decode()函數,然後filterd關鍵字javascript:在href屬性中過濾XSS?

我的問題是:

  1. 是否足以防止JavaScript作爲excuted
  2. javascript
  3. 數據URI data:能造成同樣的威脅,它更好地過濾關鍵字?爲javascript:
  4. 如果我篩選任何不以http開頭的輸入,https,ftp ...和(我需要這個)。夠了嗎?

我的主要問題是第4個。我對第一個3個問題的答案是肯定的/沒有答案。

回答

3

最有可能的是而不是足夠長期。看看HTML5 Security Cheatsheet,你會發現目前大多數XSS矢量都非常複雜,其中javascriptdata是頻繁的目標。

所以你不能只依靠阻止已知的錯誤值(「如果它不以......開頭」)。你應該只有允許改爲已知的良好值(「它只是以......開頭」)。

這不是那麼難,因爲你正在處理的URL的語法定義在RFC 3986,除了有點怪異的命名方案外,它對3.2節定義的大多數模式都很有幫助。您可以使用標準URL解析類之一(我可以推薦一些適用於Python的解析類),然後根據您的需要驗證每個標記。

請記住,#在RFC中稱爲「片段」。