3

来自ha.ckers.org/xss.html

IMG 嵌入式命令 - 当注入此命令的网页(如 Web 板)受密码保护且密码保护与同一域上的其他命令一起使用时,此功能有效。这可用于删除用户、添加用户(如果访问该页面的用户是管理员)、在别处发送凭据等……这是使用较少但更有用的 XSS 向量之一:

<IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode">

或者:

重定向 302 /a.jpg http://victimsite.com/admin.asp&deleteuser

我允许用户在论坛中发布图片。如何防止这种情况发生?

我正在使用 Java Struts,但欢迎任何通用答案。

4

5 回答 5

5

如果你遵循HTTP 规范的规则,这样的攻击是没有害处的。第9.1.1 节安全方法说:

[...] GET 和 HEAD 方法不应该具有采取除检索之外的操作的意义。这些方法应该被认为是“安全的”。这允许用户代理以特殊的方式表示其他方法,例如 POST、PUT 和 DELETE,以便用户意识到正在请求可能不安全的操作。

当然,不可能确保服务器不会因为执行 GET 请求而产生副作用;事实上,一些动态资源认为这是一个特性。这里的重要区别是用户没有请求副作用,因此不能对它们负责。

因此,所有在服务器端更改数据的请求都应该只允许通过 POST。即使在那里,您也应该只允许您的系统通过生成仅对特定表单/操作有效的令牌进行身份验证的请求。

于 2010-01-31T19:22:30.003 回答
3

这种攻击只是对任何 URL 发出的 HTTP GET 请求。您不能通过阻止某些<img>标签来可靠地阻止它。

相反,您需要确保您的网站没有目标(响应GET请求和更改内容的 URL)

如果没有响应 HTTP GET(而不是 POST)和更改数据的任何“多汁” URL,攻击者将没有什么可攻击的。(<img>标签不能用于创建 HTTP POST)

于 2010-01-31T18:55:24.477 回答
2

跨站点脚本是不允许论坛用户通过链接到站点外部图像来发布图像的原因之一。应通过允许用户将图像文件上传到您的站点并使用内部相对 URI 来提供图像发布。

于 2010-01-31T18:59:19.417 回答
2

通过注入<img>标签,某人可以绕过针对 GET 请求的基于引用的 XSRF 保护。之所以会这样,是因为 GET 请求的<img>referer 与 host 自己的 referer 相同。因此,这将绕过代码检查以查看引用者和主机是否不同。

您不应该允许人们在您的页面上放置 html。在这种情况下,您应该让用户上传它们,然后在本地托管图像。如果您真的希望人们在您的网站上放置 IMG 标签,请确保该 URL 没有指向您的服务器,因为这就是攻击会做的事情!也不要使用基于引用的 XSRF 保护,使用基于令牌。 <img>标签注入无法绕过基于令牌的 xsrf 保护。

于 2010-01-31T19:10:13.493 回答
0

似乎没有人提到允许人们发布图片的威胁不是针对,而是针对其他网站

如果您允许人们发布图片但您的站点没有 XSRF 漏洞,那么您的站点没有危险;其他具有 XSRF 漏洞的站点也是如此,因为您的用户在访问您的站点时会在不知不觉中通过嵌入式图像向其他站点发出请求。恶意<img>标签将如下所示:

<img src="http://my-bank-website.com/withdraw_money.php?amount=100000&account=mandy-the-hacker" />

请注意,这不是真实图像,但浏览器不会知道这一点,因此无论如何它都会发出请求,将 100,000 美元转移到mandy-the-hacker的帐户,假设用户当前登录到my-bank-website .com _ 这就是 XSRF 漏洞的工作原理。

防止这种情况的唯一方法是强制用户上传图片,而不是为他们提供 URL。但是,恶意用户仍然可以只提供 XSRF 漏洞的链接,因此删除提供 URL 的能力并没有真正的帮助;您并没有通过允许<img>标签来真正伤害其他网站,而是通过不在表单中使用特定于用户的令牌来伤害自己。

于 2010-02-01T19:21:06.527 回答