Security 如何使用图像URL防止跨站点请求伪造攻击?

Security 如何使用图像URL防止跨站点请求伪造攻击?,security,struts,csrf,Security,Struts,Csrf,发件人: IMG嵌入式命令-这是有效的 当这个网页在哪里 (像一个网页板)在后面 密码保护和该密码 保护与其他命令一起工作 在同一个域上。这是可以使用的 要删除用户,请添加用户(如果 访问该页面的用户是 管理员),发送凭据 其他地方等等。。。。这是一个 较少使用但更有用的XSS 向量: <IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode"> 或: 重定向302/

发件人:

IMG嵌入式命令-这是有效的 当这个网页在哪里 (像一个网页板)在后面 密码保护和该密码 保护与其他命令一起工作 在同一个域上。这是可以使用的 要删除用户,请添加用户(如果 访问该页面的用户是 管理员),发送凭据 其他地方等等。。。。这是一个 较少使用但更有用的XSS 向量:

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

或:

重定向302/a.jpg

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


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

此攻击只是对任何URL发出的HTTP GET请求。您无法通过阻止某些
标记来可靠地阻止它

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


如果没有任何响应HTTP GET(而不是POST)和更改数据的“有趣”URL,攻击者将不会受到任何攻击。(
标记不能用于创建HTTP帖子)

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

通过注入
标记,某人可以绕过基于referer的XSRF保护以获得GET请求。原因是由
生成的GET请求的referer与主机本身具有相同的referer。因此,这将绕过代码检查,以查看引用程序和主机是否不同


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

如果你遵守游戏规则,这样的攻击不会造成伤害。该节说:

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

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


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

似乎没有人提到允许人们发布图像的威胁不是您,而是其他站点

如果您允许人们发布图像,但您的站点没有XSRF漏洞,则您的站点没有危险;其他存在XSRF漏洞的站点也存在漏洞,因为当用户访问您的站点时,他们会不知不觉地通过嵌入的映像向其他站点发出请求。恶意

请注意,这不是真实的图像,但浏览器不会知道,因此它会发出请求,将100000美元转移到黑客的帐户,假设用户当前登录到我的银行网站.com。这就是XSRF漏洞的工作原理


防止这种情况发生的唯一方法是强迫用户上传图像,而不是为他们提供URL。然而,恶意用户仍然可以提供指向XSRF漏洞的链接,因此删除提供URL的功能并没有真正的帮助;您允许
标记并不是在真正伤害其他站点,他们不使用标记是在伤害自己。

这种攻击称为跨站点请求伪造。这不是真正的跨站点脚本。这不一定是跨站点脚本。您的应用程序上有任何形式的xsrf保护吗?如果您收到的请求可以更改密码或注销,那么它仍然是XSRF,reglardess的
标记。这只是一个问题,如果你正在检查请求的referer作为一个安全措施,你可能没有这样做。这是正确的。我目前有一些GET请求更改了系统状态,但这些请求没有针对此类攻击的保护。有些时候XRSF可能是用户满的,你可以在这里看到:你在说什么,因为它不是xss。谢谢Slaks,所以帖子基本上是安全的?使用这种方法无法伪造post请求,只要您阻止Javascript和
/
标记。帖子仍然容易受到其他站点正常XSS的攻击。对。。。但即使伪造的请求来自另一台服务器,它仍然是xsrf。POST请求仍然可以伪造。不,请求不能受到xss的攻击,它们容易受到XSRF/CSRF的攻击!在给别人提建议之前,你需要多读一些书!有人会被黑客攻击。好的<代码>@宴会:有可能伪造POST请求,因此此答案不正确。@宴会:BlueRaja是正确的。POST请求也可以伪造。或者通过利用XSS漏洞在您的站点上。或者通过JavaScript在第三方网站上。这就是为什么我添加了只允许真实POST请求的备注。这个答案解释了HTTP协议基本方面的最佳实践,我没有错
<img src="http://my-bank-website.com/withdraw_money.php?amount=100000&account=mandy-the-hacker" />