我目前正在开发一款由Rails提供支持的头像应用程序,用户可以上传用户个人资料的头像。
我想使用自定义HTTP标头来阻止公开上传请求,并且只允许来自我的应用的请求。我将如何使用Ruby on Rails进行此操作?
我正在使用AJAX上传头像,所以这可能会有点困难。此外,我不希望在公共HTML代码中显示标题,否则它会失败添加它的对象!
答案 0 :(得分:0)
如果你添加
protect_from_forgery
到您的应用程序控制器,它将阻止来自第三方链接的所有NON Get请求。它将使用身份验证令牌为每个表单添加一个隐藏的输入值,该令牌将用于检查发送到服务器的所有数据。
进一步阅读
http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf
http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html
答案 1 :(得分:0)
您可以实现自定义HTTP标头(例如X-Foobar-Validity-Status: valid
)并在before_filter
中进行检查。
class YourController < ApplicationController
before_filter :check_header
def check_header
unless request.headers['X-Foobar-Validity-Status'] == "valid"
render json: {"error" => "You are an evil attacker. Go away"}
end
end
end
但是,我认为这是个坏主意。
jQuery.ajax
headers option。User-Agent
来代替使用专有标题。相反,我会使用rails的protect_from_forgery
机制来提升。它让您的生活更轻松,更安全。只需通过应用中的http请求获取authenticanticy令牌,然后将其与您的请求一起发回。这应该会阻止入侵者。