我们希望允许“正常”的href链接到其他网页,但我们不希望任何人偷偷进入客户端脚本。从HREF中删除Javascript
正在HREF和onclick/onmouseover/etc中搜索“javascript:”。事件足够好吗?或者还有其他事情要检查吗?
我们希望允许“正常”的href链接到其他网页,但我们不希望任何人偷偷进入客户端脚本。从HREF中删除Javascript
正在HREF和onclick/onmouseover/etc中搜索“javascript:”。事件足够好吗?或者还有其他事情要检查吗?
听起来好像你允许用户使用标记提交内容。因此,我建议看一看关于防止跨站点脚本的一些文章,这些文章可能会比简单地阻止JavaScript被插入到HREF标记中。下面是一个我发现,可能是有用的:
http://weblogs.java.net/blog/gmurray71/archive/2006/09/preventing_cros.html
您必须使用允许的协议白名单才能完全安全。如果你使用黑名单,迟早你会错过像“telnet://”或“shell:”或某种可以利用的浏览器特定的事情,你从来没有听说过...
不,有一个你需要检查更多。
可以对URL的第一个进行编码(使用HTML实体或URL编码或两者的混合)。
其次,你需要检查畸形的HTML,该浏览器可能在猜测,并最终允许在某些脚本。
第三,你需要检查基于CSS脚本,例如背景:url(javascript:...)或width:表达式(...)
可能还有更多的我错过了 - 你需要小心!
你不得不在用户输入时要非常小心。你会想要做一个白名单,但不仅仅是href。例如:
<img src="nosuchimage.blahblah" onerror="alert('Haxored!!!');" />
或
<a href="about:blank;" onclick="alert('Haxored again!!!');">click meh</a>
一个办法是在所有禁止html和使用相同的排序格式,一些论坛使用。只需更换
[url="xxx"]yyy[/url]
与
<a href="xxx">yyy</a>
这会让你周围的鼠标等问题,然后,只需确保链接开始了与列入白名单协议,没有引号("
或某些可能被php或浏览器解密的文件)。
听起来就像您正在寻找PHP的strip_tags
的伴侣功能,即strip_attributes
。不幸的是,它还没有被写入。 (提示提示。)
有,但是,strip_tags
文档,在这里一个有趣的前瞻性建议:
http://www.php.net/manual/en/function.strip-tags.php#85718
理论上,这将剥夺任何不是一个href,类或ID从提交链接;好像你可能想要进一步锁定它,只需要hrefs。