允许用户通过URL上传图像时应该注意什么?

时间:2011-06-06 15:40:06

标签: javascript security get

我正在一个用户可以发布笔记的网站上工作。我正在考虑允许用户通过提供图像的URL来发布图像(即不通过表单上传)。

但是,我已经了解到这可以用来进行某种黑客攻击,例如,用户可以粘贴不是图像的网址,因此当页面加载时,会向该网页发出GET请求网址。
我想知道:
1.可以做些什么其他恶意事情,如何阻止它们呢? 2.有一种简单的方法(只使用JavaScript)来检查网址是否是图像?

2 个答案:

答案 0 :(得分:6)

当允许用户将任意文件上传到服务器时(这是),有很多问题需要关注。

首先,您需要确保文件是图像,并且只能作为图像访问(即不作为脚本执行)

其次,图像不能太大或对用户或服务器充当DoS

第三,您需要确保以安全的方式保存图像,以免用户覆盖敏感文件。

第四,提供来自与主要内容不同的所有上传内容。这不仅更安全,而且更快(没有cookie)

第五,确保使用ImageMagick或GD处理图像以删除图像中的任何不需要的数据。请记住,图像文件可以用作容器,而不仅仅是可见数据。

六:注意路径注入,LFI,RFI等攻击

七:不要依赖扩展来告诉你图像的文件类型。自己检查一下。

  

但是,我知道这可以   曾经做某种黑客攻击   例如,用户可以粘贴一个网址   不是图像,所以当页面是   加载,将进行GET请求   那个网址。

用户是否会粘贴图片链接或从自己的计算机上传文件?

  
      
  1. 还有什么可以用它做黑客的事情?
  2.   

让我们这样说:用户将任意文件上传到您的服务器

  
      
  1. 有一种简单的方法(只使用JavaScript)来检查网址是否是一个   图像?
  2.   

不是真的,也无济于事。您想要服务器端检查

您可以阅读的内容列表:

http://www.scriptygoddess.com/archives/2004/10/19/gifs-that-execute-a-php-script/

还有更多问题......

答案 1 :(得分:0)

如果您将未知的网址嵌入HTML格式的图片中,则此网址的获取请求将以任何方式完成,而不管图像是否真实。

问题是这是否会造成一些损害

  • 向图像服务器显示正在查看它(以及它所嵌入的页面)(如果不将图像复制到服务器,则无法避免这种情况)
  • 使用当前查看器的用户上下文(可能在那里登录,并且不会自愿执行此类操作)在图像服务器上运行脚本,根据查看器执行不同的操作(并且可能间接地对查看者有害)观众)。您可以通过代理访问权限或将图像复制到服务器来避免这种情况。)
  • 或被用户的浏览器误解为脚本或其他有害内容,对页面外观或甚至更多恶意内容做出奇怪的事情。我认为这是大多数浏览器试图通过跨站点访问策略来防范的。如果将图像复制到服务器,这可能会更糟。