Использование редактируемого пользователем URL изображения в приложении.Проблемы с безопасностью - PullRequest
1 голос
/ 21 мая 2010

Я пишу приложение, в котором пользователи должны показывать свои фотографии, однако, поскольку ресурсы моего сервера очень ограничены, я не могу позволить им загрузить их на сервер.

Итак, у меня есть три основных вопроса:

1. Как правильно проверить URL фотографии? По крайней мере, я могу проверить с помощью regexp, однако мне нужно проверить конец файла:

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

2. Проблемы с безопасностью? XSS?

Даже когда я проверяю изображение в момент его создания, хакер может в любое время заменить изображение вредоносным.

3. Может быть, есть бесплатные магазины активов с API?

1 Ответ

1 голос
/ 22 мая 2010

1. Как правильно проверить URL фотографии?

Вы можете использовать плагин, который проверяет формат URL или написать его самостоятельно:

  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 %> безопасно. Помните, что пользователь все еще может использовать изображение размером 100 МБ, которое замедлит каждого посетителя.

3. Может быть, есть бесплатные магазины активов с API?

Я не знаю ничего, кроме облачного пространства, хостинг amazon s3 довольно дешевый. Некоторые плагины для загрузки изображений поддерживают эти два, так что вы хотя бы сэкономите время.

...