2008-12-01 128 views
3

我們希望允許「正常」的href鏈接到其他網頁,但我們不希望任何人偷偷進入客戶端腳本。從HREF中刪除Javascript

正在HREF和onclick/onmouseover/etc中搜索「javascript:」。事件足夠好嗎?或者還有其他事情要檢查嗎?

回答

3

您必須使用允許的協議白名單才能完全安全。如果你使用黑名單,遲早你會錯過像「telnet://」或「shell:」或某種可以利用的瀏覽器特定的事情,你從來沒有聽說過...

2

不,有一個你需要檢查更多。

可以對URL的第一個進行編碼(使用HTML實體或URL編碼或兩者的混合)。

其次,你需要檢查畸形的HTML,該瀏覽器可能在猜測,並最終允許在某些腳本。

第三,你需要檢查基於CSS腳本,例如背景:url(javascript:...)或width:表達式(...)

可能還有更多的我錯過了 - 你需要小心!

0

你不得不在用戶輸入時要非常小心。你會想要做一個白名單,但不僅僅是href。例如:

<img src="nosuchimage.blahblah" onerror="alert('Haxored!!!');" /> 

<a href="about:blank;" onclick="alert('Haxored again!!!');">click meh</a> 
0

一個辦法是在所有禁止html和使用相同的排序格式,一些論壇使用。只需更換

[url="xxx"]yyy[/url]

<a href="xxx">yyy</a>

這會讓你周圍的鼠標等問題,然後,只需確保鏈接開始了與列入白名單協議,沒有引號(&quot;或某些可能被php或瀏覽器解密的文件)。

0

聽起來就像您正在尋找PHP的strip_tags的伴侶功能,即strip_attributes。不幸的是,它還沒有被寫入。 (提示提示。)

有,但是,strip_tags文檔,在這裏一個有趣的前瞻性建議:

http://www.php.net/manual/en/function.strip-tags.php#85718

理論上,這將剝奪任何不是一個href,類或ID從提交鏈接;好像你可能想要進一步鎖定它,只需要hrefs。