我收到了Brakeman的警告。正如他们所说,依赖于用户提供的值的重定向可用于“欺骗”网站或隐藏恶意链接,否则看起来无害的URL。如果目的地未经过验证,他们还可以允许访问站点的受限区域。
| Confidence | Class | Method | Warning Type | Message
| High | DocumentsController | download | Redirect | Possible unprotected redirect near line 46: redirect_to(+Document.find(params[:id]).f
在我的控制器中,我创建了一个方法download
,它采用文件URL(存储在Amazon S3上的文件和我数据库中的URL,感谢Paperclip)并创建了一个URL(即document_url
)由于.expiring_url(3)
def download
@document = Document.find(params[:id])
document_url = @document.file.expiring_url(3)
if URI.parse(document_url).host.include? "domain.com"
redirect_to document_url, only_path: true
else
document_url = nil
end
end
我一直试图通过Brakeman的验证而没有成功。正如您在上面所看到的,我试图检查我的域名是否存在于URL中,但它没有更改Brakeman上的报告。
知道如何继续吗?
答案 0 :(得分:0)
我有类似的问题。我通过利用下面的强大参数传递了警告,但我不确定它为什么会起作用。
redirect_to referer_param
def referer_param
params.require(:referer)
end