允许用户使用远程图像 url 作为头像是个好主意吗?

Is it good idea to allow users to use remote image url as Avatar?

我在在线社区工作,用户将在其中拥有个人资料页面,他可以在其中上传他选择的图像或提供远程图像的 url。

所以只存储远程图像 url 而不是图像本身并像这样在个人资料页面上使用它是不是很好

<img src="remote_image_url">

或者从远程url下载图片并存储在local/our服务器上以备后用

<img src="path_on_our_server">

我是从黑客攻击的角度考虑的,如果我允许用​​户使用远程图像并按原样使用它而不是将其下载到我们的服务器上,会有什么问题吗?

您应该存储图像,加载您无法控制的远程 URL 总是很危险的。

展开:

一位用户将他们的头像添加为 www.example.com/pic.jpg。然后他们注意到您只是在您的网站上包含 URL,因此他们将头像更改为 www.example.com/hack.js 而您仍然包含此文件,因此现在他们在该文件中添加的任何 JS 都将是 运行 在他们的网站上。

像这样的嵌入式 JS 包含是黑客的梦想,并且绝对是一个巨大的安全漏洞。如果您想了解其中一种攻击的真实示例,ebay 去年就被攻击了 - http://www.infosecurity-magazine.com/news/ebay-under-fire-after-cross-site/

通过在您的代码中使用用户头像 url,您实际上是在让所有访问者也访问该用户的网站。用户将能够跟踪谁在何时查看图像。

这几乎就是分析工具的工作原理。通过从第三方站点请求资源,第三方可以跟踪您的用户。

考虑一下您正试图减轻哪些风险。

无论您是让用户将图片上传到您的站点还是添加指向远程图片位置的链接,坏人都会做坏事。如果您允许人们将图像上传到您的服务器,则可能存在针对您的服务器的攻击媒介(图像处理库中的漏洞由故意畸形的图像触发)。如果您允许人们添加指向远程图像的链接,则远程图像可能会恶意攻击浏览器漏洞(然后您的站点似乎在托管恶意图像)。

如果您关心上传不当个人资料图片的人,那么您将需要某种形式的积极管理。

Gravatar 服务专门托管个人资料头像图像,并且有一个针对 "police" 头像内容的服务条款小组。

http://gravatar.com