Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 远程映像嵌入:如何处理需要身份验证的映像?_Security_Http_Authentication_Csrf_Abuse - Fatal编程技术网

Security 远程映像嵌入:如何处理需要身份验证的映像?

Security 远程映像嵌入:如何处理需要身份验证的映像?,security,http,authentication,csrf,abuse,Security,Http,Authentication,Csrf,Abuse,我管理一个大型的活跃论坛,我们正被一个非常严重的问题困扰着。我们允许用户嵌入远程图像,就像stackoverflow处理图像(imgur)一样。但是,我们没有特定的主机集,可以使用以下代码从任何主机嵌入图像: [img]http://randomsource.org/image.png[/img] 这个很好,很漂亮。。。除了用户可以嵌入需要身份验证的图像外,该图像会导致出现一个弹出窗口,并且由于身份验证弹出窗口可以编辑,因此它们会显示类似“请在此处输入您的[sitename]用户名和密码”的内

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

[img]http://randomsource.org/image.png[/img]
这个很好,很漂亮。。。除了用户可以嵌入需要身份验证的图像外,该图像会导致出现一个弹出窗口,并且由于身份验证弹出窗口可以编辑,因此它们会显示类似“请在此处输入您的[sitename]用户名和密码”的内容,不幸的是,我们的用户一直对其着迷

对此的正确反应是什么?我一直在考虑以下事项:

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

  • 拥有授权的映像主机列表

  • 完全禁用远程嵌入


  • 问题是我从来没有在其他地方看到过这种情况,但是我们被它困扰着,我们如何防止这种情况发生

    我想你基本上回答了你自己的问题。就我个人而言,我会在选项1和选项2之间进行混合:即创建一个客户端Javascript,它首先根据一组白名单主机检查图像嵌入URL。对于不在该列表中的每个嵌入URL,在检查服务器是否没有返回401状态代码的同时,执行一些操作

    这样就在延迟(我们试图通过HEAD方法和域白名单最小化重复请求)和安全性之间取得了平衡。
    话虽如此,如果您的用户可以接受,那么选项2是最安全的。

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

    最好的解决办法是-

  • 下载映像服务器端并将其存储在文件系统/数据库中。保持合理的最大文件大小,否则攻击者可以将数吨Gb的数据下载到服务器上,从而占用n/w和磁盘资源
  • (可选)验证文件实际上是图像
  • 使用丢弃的域或ip地址为映像提供服务。可以创建伪装成jar或小程序的图像;为一次性域中的所有文件提供服务可以保护您 防止这种恶意活动
  • 如果无法在服务器端下载图像,请在服务器端创建允许的url模式(不仅仅是域)的白名单。放弃与此URL模式不匹配的所有URL

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