2008-12-01 45 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。