对于您提到的特定示例,我不知道有任何浏览器会执行 Javascript。我认为在这种情况下任何浏览器都不太可能执行 Javascript。这与现代浏览器中的更新保护无关。
但是,我怀疑你仍然很脆弱。如果攻击者可以将标记插入到 href 属性中,这可能意味着他们可以插入任何他们想要的东西。如果攻击者可以插入他们想要的任何东西,那么糟糕的事情就会发生。例如,攻击者可以使它看起来像这样:
<a href="javascript:alert(8007)">Click me</a>
这是个坏消息,因为浏览器会在这种情况下执行 Javascript。因此,这是攻击者可以尝试利用 XSS 漏洞的一种方式。
此外,如果 href 参数的值周围没有引号,则会有其他方法来攻击您的系统。例如,<a href=blah onclick=alert(8007)>Click me</a>
是坏消息,将执行 Javascript。(感谢@AviD 指出这一点。)即使在href 参数的值周围有引号,如果攻击者完全控制了其中的值,攻击者也可以提供自己的引号来突破属性然后造成麻烦,像这样:<a href="blah" onclick=alert(8007) ignoreme="blah">Click me</a>
。(在这里攻击者插入了值blah" onclick=alert(8007) ignoreme="blah
。)可能还有更多这样的例子。
底线。我绝对建议您修复 XSS 漏洞。我怀疑你有风险。坏人已经开发了大量令人惊讶且巧妙的利用 XSS 漏洞的方法,这些方法你不可能知道;因此,如果你有 XSS 漏洞,最好的办法是先发制人地修复它,不要冒险。
修复漏洞。 要修复该缺陷,我建议您结合使用验证和输出转义。首先,确保 URL 的协议处理程序是列入白名单的集合之一(例如,http
、https
、ftp
、mailto
)。然后,在将 URL 插入标记之前,应用 HTML 转义来转义所有尖括号、引号和 & 符号,并确保属性值被引号包围。
实现此修复的确切方法取决于语言,但您可以在网上找到很多关于如何在这种情况下避免 XSS 缺陷的信息。例如,在确保动态值包含安全协议之后,在 PHP 中您可以使用htmlspecialchars(., ENT_QUOTES)
转义尖括号、引号和 & 符号。或者您可以使用OWASP ESAPI,它为这种情况提供了支持。
要了解更多信息,我可以向Web 开发人员推荐一个很好的介绍。这只是一个介绍,您需要阅读更多内容,但它将帮助您从高层次上了解威胁。OWASP 在防御 XSS 方面有一些很好的资源;例如,他们有一个有用的备忘单,说明如何使用 OWASP ESPI 来避免 XSS 漏洞。