从HREF中删除Javascript

时间:2008-12-01 21:23:17

标签: html security validation xss sanitization

我们希望允许“正常”href链接到其他网页,但我们不希望允许任何人潜入客户端脚本。

在HREF和onclick / onmouseover / etc中搜索“javascript:”。活动够好吗?还是有其他事情需要检查吗?

6 个答案:

答案 0 :(得分:4)

听起来您允许用户使用标记提交内容。因此,我建议看一些关于防止跨站点脚本的文章,这些文章不仅仅是简单地防止将javascript插入到HREF标记中。以下是我发现可能有用的内容:

http://weblogs.java.net/blog/gmurray71/archive/2006/09/preventing_cros.html

答案 1 :(得分:3)

您必须使用允许协议的白名单才能完全安全。如果你使用黑名单,迟早你会错过像“telnet://”或“shell:”这样的东西,或者一些你从未听说过的特定于浏览器的东西......

答案 2 :(得分:2)

不,你还需要检查更多。

可以对第一个URL进行编码(使用HTML实体或URL编码或两者的混合)。

其次,您需要检查格式错误的HTML,浏览器可能会猜到这一点并最终允许使用某些脚本。

第三,您需要检查基于CSS的脚本,例如background:url(javascript:...)或width:expression(...)

我可能错过了更多 - 你需要小心!

答案 3 :(得分:0)

用户输入时必须非常小心。你会想要像上面提到的那样做白名单,但不仅仅是href。例如:

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

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

答案 4 :(得分:0)

一个选项是完全禁用html并使用与某些论坛使用的格式相同的格式。只需替换

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

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

这会让你解决鼠标悬停等问题。然后只需确保链接以白名单协议开始,并且其中没有引号(&quot;或某些类似于可能会被php或浏览器解密。

答案 5 :(得分:0)

听起来你正在寻找PHP strip_tags的伴随功能,即strip_attributes。不幸的是,它尚未编写。 (提示,提示。)

然而,strip_tags文档中有一个有趣的建议:

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

理论上,这将从提交的链接中删除任何不是href,class或ID的内容;看起来你可能想要进一步锁定它,只需要使用hrefs。