我正在编写一个应用程序,要求用户显示他们的照片,但由于我的服务器资源非常有限,我不能让他们将其上传到服务器。
所以我有三个主要问题:
1。如何正确验证照片网址?至少我可以使用regexp验证,但是我需要检查文件结尾:
`validates_format_of :photo_url, :with => URI::regexp(%w(http https))`
2。安全问题? XSS吗
即使我在创作时验证图片,黑客也可以随时用恶意内容替换图片。
第3。也许有免费的资产商店有API?
答案 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托管相当便宜。 一些图片上传插件支持这两个,所以你至少可以节省一些时间。