authentication - 远程图像嵌入 : how to handle ones that require authentication?

标签 authentication http security csrf

我管理着一个庞大而活跃的论坛,但我们正被一个非常严重的问题所困扰。我们允许用户嵌入远程图像,就像 stackoverflow 处理图像 (imgur) 的方式一样,但是我们没有一组特定的主机,可以使用以下代码从任何主机嵌入图像:

[img]http://randomsource.org/image.png[/img]

这工作正常而且花花公子...除了用户可以嵌入需要身份验证的图像,该图像会导致出现弹出窗口,并且因为可以编辑身份验证弹出窗口,所以他们会输入类似“请输入您的[站点名称] 用户名和密码”,不幸的是我们的用户已经上当了。

对此的正确回应是什么?我一直在考虑以下几点:

  1. 每个页面加载都有一段 Javascript 执行,用于检查页面上的每个图像及其状态

  2. 拥有授权的图片托管列表

  3. 完全禁用远程嵌入

问题是我从未在其他任何地方看到过这种情况,但我们却深受其害,我们如何防止这种情况发生?

最佳答案

这不仅仅是密码问题。您还允许您的一些用户对其他用户进行 CSRF 攻击。例如,用户可以将他的个人资料图像设置为 [img]http://my-active-forum.com/some-dangerous-operation?with-some-parameters[/img]

最好的解决办法是——

  1. 下载图像服务器端并将其存储在文件系统/数据库中。保持合理的最大文件大小,否则攻击者可以将大量 GB 的数据下载到您的服务器上,以占用 n/w 和磁盘资源。
  2. 可选地,验证文件是否确实是图像
  3. 使用一次性域名或 IP 地址提供图像。可以创建伪装成 jar 或 applet 的图像;提供来自一次性域的所有文件可以保护您 来自此类恶意事件。

如果您无法在服务器端下载图像,请在服务器端创建一个允许的 url 模式(不仅仅是域)的白名单。丢弃与此 URL 模式不匹配的所有 URL。

您不得在 javascript 中执行任何检查。在 JS 中执行检查可以解决您眼前的问题,但不能保护您免受 CSRF 攻击。您仍在从您的用户浏览器向攻击者控制的 url 发出请求,这是有风险的。此外,该方法对性能的影响令人望而却步。

关于authentication - 远程图像嵌入 : how to handle ones that require authentication?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5139083/

相关文章:

authentication - 无法通过 jboss-web.xml 设置安全域

ASP.NET:在代码中验证用户

c# - 如何在 C# 中为 DSA key 对创建带有自签名证书的 PKCS12 p12 文件?

java - 如何在 Java 的 Native HTTP Client 上使用代理密码身份验证

php - laravel-5.4 - 错误 :Creating default object from empty value

perl - 梅森响应之前和之后的这些数字意味着什么?

http - 如何从 Kubernetes 服务背后的 HTTP 请求中读取客户端 IP 地址?

json - 远程传输 session 在提供正确的 session ID 后没有响应

c# - 从 HTTP 请求访问客户端证书

security - 清理 RediSearch 的查询