brakeman 报告 - 直接模型属性用作文件名

问题描述 投票:0回答:3

刹车员显示以下错误,文件是用回形针管理的。

在我的控制器中:

asset_file ||= AssetFile.find(params[:id])

如果资产文件
// 下载文件
发送文件asset_file.uploaded_file.path,:类型=> asset_file.uploaded_file_content_type
否则
flash[:error] = t('document.mind_your_asset_file')
重定向到 root_url
结束

enter image description here

ruby-on-rails brakeman
3个回答
9
投票

请记住,Brakeman 不会报告错误[0],它会报告警告。它会生成有关应用程序中“潜在”安全问题的警告。换句话说,它会警告您一些您作为人类认为不是真正问题的事情。纯静态分析安全工具基本上不可能不报告误报。 您实际上并没有提出问题,所以我假设您想知道为什么报告此警告和/或如何修复它。如果这些都不是您的问题,请澄清。

Brakeman 知道

AssetFile

是一个模型(很可能是因为它是在

app/models
目录中定义的)。它知道
send_file
允许访问文件系统。当它看到
send_file AssetFile.find(params[:id]).uploaded_file.path
时,它会将其解释为模型属性(可能是数据库中的值),该属性
可能
是用户可控的。因此,它会生成一个 File Access 警告,让您知道该代码可能允许攻击者访问服务器上的任意文件。

我想下一个问题是为什么 Brakeman 在您使用

paperclip

时报告此情况,所以这可能是安全的。好吧,因为布雷克曼对

paperclip
一无所知。然而,这种情况已经出现过很多次了,所以我将研究这是否安全,并查看是否将这种用法列入白名单。

对于第二个问题,该怎么办——好吧,你不必做任何事情。虽然零刹车警告是一个崇高的目标,但总会有误报。对于此特定警告,您无法在不更改 Brakeman 本身的情况下使此代码对 Brakeman 显得更安全。

如果这篇文章的目的实际上是报告误报,那么最好

为 Brakeman 提出问题

[0] 我想从技术上讲,它在“例外”表中报告了自己的错误,可以在屏幕截图中看到。将这些问题报告给 Brakeman 项目以查看是否可以修复可能会有所帮助。


1
投票
https://stackoverflow.com/a/11267821/1935918

中所述,您现在可以通过检查模型属性是否包含在值数组中来避免此错误。


1
投票
http://brakemanscanner.org/docs/ignoring_false_positives/

浏览他们的工具并回答每个警告的一些问题。最后将文件保存为“config/brakeman.ignore”。下次您运行“brakeman”时,它将运行忽略文件。

© www.soinside.com 2019 - 2024. All rights reserved.