如何安全,低成本地允许我的网站上的图像?

时间:2010-07-05 13:30:54

标签: ruby-on-rails security image xss markdown

我开发了一个social networking site for gardeners网站,并且有兴趣让用户能够将图像添加到他们的“推文”中。

如果我允许他们将图像上传到实际网站,这似乎会很快变得昂贵(这是一个副项目,没有任何人资助,而不是我和我自己的痴迷)。假设该网站变得适度受欢迎,每周有100K用户发布一张图片,大小只有250K。那是(100000 * .1 * 52/1024)= 508 MB /年的存储空间(并没有考虑到增加的带宽)。另外,我必须增加服务器负载以缩放图像。我不确定我是否应该继续这样做,或者是否有更好的可能性。

在某些方面,链接到其他网站似乎更好。你确实有破碎的链接,但对我来说更大的担忧是安全性:XSS。

如果重要的话,应用程序在Rails 3上,使用MongoDB / Mongoid作为后端。

我正在寻找解决方案,例如:

  • 在外部网站上存储图片的API。最理想的是能够将其上传到我的网站,并进行API调用以将其存储在外部网站上。
  • API(可能是Javascript API),可以轻松安全地链接到一个或多个外部图像托管站点。
  • Markdown或类似的标记,可以安全地链接到外部图像。我有兴趣让用户能够以有限的方式格式化他们的帖子,因此这可能同时解决两个问题。我注意到这就是Stack Overflow的功能。
  • 将图像网址格式列入白名单的安全库
  • 关于我为什么错误地思考这个问题的建议。例如,也许我应该只存储图像。每年500MB并不是那么昂贵,它确实让我创造了非常干净的用户体验。

我的目标是(按顺序):   - 对我自己的网站都是安全的,并且不允许对其他网站进行XSS攻击   - 最佳用户体验   - 易于维护和实施

您在网站上允许用户提供的图片做了什么?

3 个答案:

答案 0 :(得分:4)

你认为这个问题是错误的;)或者说不是在正确的时间。

当您还没有那么多用户时,现在不要担心带宽。专注于使网站用户友好和受欢迎第一。性能,带宽,磁盘空间 - 这些是您在遇到问题时要处理的事情。当您拥有10万用户时,购买该空间和带宽的成本,例如,Amazon S3可能不再是一个问题。

答案 1 :(得分:2)

为什么不使用像Amazon s3这样的服务?便宜,非常便宜(使用Reduced Redundancy Storage),而像Paperclip这样最重要的插件支持开箱即用......

答案 2 :(得分:0)

您需要查看图片主机的T& C(flickr等等),看看您的用法是否适用。 Flickr有一个API,不确定其他人只是搜索HOST api。

Flickrs api位于: http://www.flickr.com/services/api/