在应用程序中使用用户可编辑的图像URL。安全问题

时间:2010-05-21 19:06:23

标签: ruby-on-rails image validation xss assets

我正在编写一个应用程序,要求用户显示他们的照片,但由于我的服务器资源非常有限,我不能让他们将其上传到服务器。

所以我有三个主要问题:

1。如何正确验证照片网址?至少我可以使用regexp验证,但是我需要检查文件结尾:

`validates_format_of :photo_url, :with => URI::regexp(%w(http https))`

2。安全问题? XSS吗

即使我在创作时验证图片,黑客也可以随时用恶意内容替换图片。

第3。也许有免费的资产商店有API?

1 个答案:

答案 0 :(得分:1)

<强> 1。如何正确验证照片网址?

您可以使用验证网址格式的插件或自行编写:

  validates_each :photo_url do |record, attr, value|
    begin
      uri = URI::parse(value)
      record.errors.add(nil, 'Sorry, you may only use http/https links') if (uri.class.to_s =~ /URI::HTTPS?/).nil?
      record.errors.add(nil, 'The url must point to a picture') unless value =~ /\.(png|jpg|jpeg)$/i
    rescue URI::InvalidURIError
      record.errors.add(nil, 'The format of the url is not valid')
    end
  end

<强> 2。安全问题? XSS吗

只要您逃避文本,就没有任何未解决的安全问题。 <%=h image_tag obj.photo_url %>是安全的。 请记住,用户仍然可以使用100MB的图像来减慢每个访问者的速度。

第3。也许有免费的资产商店有API?

我所知道的并不存在,但架空云,亚马逊s3托管相当便宜。 一些图片上传插件支持这两个,所以你至少可以节省一些时间。