Ruby on rails brakeman报告-直接模型属性用作文件名
制动器显示以下错误,文件正在使用回形针管理。 在我的控制器中 asset_file | |=AssetFile.find(参数[:id]) 如果是资产_文件Ruby on rails brakeman报告-直接模型属性用作文件名,ruby-on-rails,brakeman,Ruby On Rails,Brakeman,制动器显示以下错误,文件正在使用回形针管理。 在我的控制器中 asset_file | |=AssetFile.find(参数[:id]) 如果是资产_文件 //正在下载文件 发送\u文件资产\u文件.上传的\u文件.路径,:type=>资产\u文件.上传的\u文件\u内容\u类型 否则 flash[:error]=t('document.mind\u your\u asset\u file') 将\u重定向到根目录\u url 结束 请记住,制动器不会报告错误[0],它会报告警告。它会生成有关
//正在下载文件
发送\u文件资产\u文件.上传的\u文件.路径,:type=>资产\u文件.上传的\u文件\u内容\u类型
否则
flash[:error]=t('document.mind\u your\u asset\u file')
将\u重定向到根目录\u url
结束
请记住,制动器不会报告错误[0],它会报告警告。它会生成有关应用程序中潜在安全问题的警告。换句话说,它会警告你,作为一个人类,你会判断这些事情不是真正的问题。纯静态分析安全工具根本不可能从不报告误报 您实际上没有问任何问题,因此我假设您希望知道报告此警告的原因和/或如何修复它。如果这两个问题都不是你的问题,请澄清 Brakeman知道
AssetFile
是一个模型(很可能是因为它是在app/models
目录中定义的)。它知道send_file
允许访问文件系统。当它看到send_file AssetFile.find(params[:id]).uploaded_file.path
时,它将其解释为一个模型属性(可能是来自数据库的值),该属性可能是用户可以控制的。因此,它会生成一个文件访问
警告,让您知道该代码可能允许攻击者访问服务器上的任意文件
我想下一个问题是为什么Brakeman在您使用回形针时报告此情况,因此这可能是安全的。因为Brakeman对回形针一无所知。但是,这已经出现过很多次了,所以我将研究这是否安全,并了解如何将此用法列入白名单
至于第二个问题,你不需要做任何事情。虽然零刹车警告是一个崇高的目标,但总会有误报。对于此特定警告,在不更改Brakeman自身的情况下,您无法使此代码对Brakeman更安全
如果这篇文章的目的实际上是报告假阳性,那么最好是
[0]我猜从技术上讲,它会在“异常”表中报告自己的错误,这可以在您的屏幕截图中看到。向Brakeman项目报告这些问题可能会有所帮助,以查看是否可以修复这些问题。如中所述,现在可以通过检查模型属性是否包含在值数组中来避免此错误。对于假阳性Brakeman,您可以使用命令“Brakeman-I”忽略这些警告
浏览他们的工具并回答每个警告的一些问题。最后将文件另存为“config/brakeman.ignore”。下次运行“brakeman”时,它将运行忽略文件