我从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
),将持续3秒(为用户下载)感谢.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
我一直试图通过布雷克曼的验证,但没有成功。正如你在上面看到的,我试图检查我的域名是否存在于URL中,但它没有改变关于Brakeman的报告。
知道该怎么做吗?
我也有类似的问题。我通过使用下面的强参数传递警告,尽管我不确定为什么它能工作。
redirect_to referer_param
def referer_param
params.require(:referer)
end