是否会执行 HREF 中的 JavaScript?

信息安全 xss
2021-09-06 11:09:23

我发现了一个网站的问题,我可以在其中将脚本标签插入到锚标签的href

<a href="<script>alert(8007)</script>">Click Me</a>

我要确定的是,浏览器,甚至是较旧的浏览器执行位于 HREF 中的这个 JavaScript 的机会有多大?

我知道这个值需要在写入页面之前进行编码,等等。这个问题严格围绕上述语句的威胁级别以及浏览器在创建页面时执行 JavaScript 的机会。

由于浏览器在检测和防范这些漏洞方面做得更好,我发现测试 xss 漏洞变得更加困难。

1个回答

对于您提到的特定示例,我不知道有任何浏览器会执行 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 的协议处理程序是列入白名单的集合之一(例如,httphttpsftpmailto)。然后,在将 URL 插入标记之前,应用 HTML 转义来转义所有尖括号、引号和 & 符号,并确保属性值被引号包围。

实现此修复的确切方法取决于语言,但您可以在网上找到很多关于如何在这种情况下避免 XSS 缺陷的信息。例如,在确保动态值包含安全协议之后,在 PHP 中您可以使用htmlspecialchars(., ENT_QUOTES)转义尖括号、引号和 & 符号。或者您可以使用OWASP ESAPI,它为这种情况提供了支持

要了解更多信息,我可以向Web 开发人员推荐一个很好的介绍这只是一个介绍,您需要阅读更多内容,但它将帮助您从高层次上了解威胁。OWASP 在防御 XSS 方面有一些很好的资源;例如,他们有一个有用的备忘单,说明如何使用 OWASP ESPI 来避免 XSS 漏洞