2011-06-06 33 views
2

我正在一个用户可以发布笔记的网站上工作。我正在考虑允许用户通过向图像提供url来发布图像(即不通过表单上传)。允许用户通过URL上传图片时应该注意什么?

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

回答

6

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

首先,你需要确保该文件是一个图像,而只能作为一个图像(即不是作为一个脚本执行)

其次,图像不能过大或作为访问对用户或服务器的DoS拒绝

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

第四,提供与您的主要内容不同的所有上传内容。第五,确保您使用ImageMagick或GD处理图像以删除图像中的任何不需要的数据。第五,确保您使用ImageMagick或GD处理图像以删除图像中的任何不需要的数据。请记住,图像文件可以用作不仅仅是可见数据的容器。

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

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

不过,我已经学会了,这可能是 用来做某种黑客攻击,为 例如,用户可以粘贴网址 不是一个图像,所以当页面加载 ,一GET请求将发送到 那个url。

用户是否要粘贴指向图像的链接或从自己的计算机上传文件?

  1. 还有什么黑客可以用这个做什么?

让我们把这种方式:用户上传任意文件到您的服务器

  1. 有一种简单的方式处理(使用JavaScript)来检查的网址是 图像?

不是真的,它不会帮助。你想要做检查的事情

列表服务器端供您阅读:

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

还有更多的问题...

+0

查看http://www.thinkfu.com/blog/gifjavascript-polyglots有关违反“只能作为图像访问(即不作为脚本执行)”的示例。 – 2011-06-06 16:26:11

+0

不要在不可信输入上使用ImageMagick。浏览器的图像解码器已经比ImageMagick强化了缓冲区溢出和各种其他攻击。您可以通过chroot jailing和syscall sandboxing或以其他方式运行虚拟化的特权来减轻风险。我对GD没有经验,所以不能评论它对不可信图像的硬化程度。 – 2011-06-06 16:29:53

+0

重新配药。有些东西可能会DOS浏览器成为通过网络即时传送的有效映像。例如。包含自己的禁止服务的onload脚本的SVG图像。 – 2011-06-06 16:32:44

0

如果嵌入一个未知的网址作为图片在HTML中,对这个URL的获取请求将以任何方式完成,独立于它真的是一个图像或不是。

的问题是,这是否可以做一些伤害,无论是

  • 透露给它(和它嵌入在页面)正在看着图像的服务器(你真的不能避免这种而不会将图像复制到您的服务器上)
  • 在当前查看器的用户上下文(可能在此处登录,并且不会自动执行此类操作)在映像的服务器上运行脚本,根据观众(并可能间接伤害观众)。您可以通过代理访问或将映像复制到服务器来避免这种情况。)
  • 或被用户的浏览器误解为脚本或其他有害内容,对网页外观或更恶意的东西做出奇怪的事情。我认为这是大多数浏览器试图通过跨站点访问策略防范的原因。如果您将映像复制到服务器上,这可能会更糟糕。
+0

通过您自己的服务器代理它可以确保没有凭据(读取cookie)与请求不一致的XSRF发送。代理还可以帮助您解决混合内容问题。你是对的,尽管通过同一个来源代理它会打开一整罐蠕虫。因此,在代理内容时,您需要使用不被任何存储敏感数据或其内容受信任的页面共享的域。 – 2011-06-06 16:58:24

相关问题