brakeman report - 用作文件名的Direct Model属性

时间:2014-11-03 04:55:15

标签: ruby-on-rails brakeman

制动器显示以下错误,文件正在使用回形针管理。 在我的控制器中

  

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

     

if asset_file
  //下载文件
  send_file asset_file.uploaded_file.path ,:type => asset_file.uploaded_file_content_type
   否则
   flash [:error] = t('document.mind_your_asset_file')
    redirect_to root_url
   结束

enter image description here

3 个答案:

答案 0 :(得分:7)

请记住,Brakeman不会报告错误[0],它会报告警告。它会在应用程序中生成有关潜在安全问题的警告。换句话说,它将警告你,作为一个人,你将判断出不是真正的问题。纯静态分析安全工具基本上不可能永远不会报告误报。

您实际上并未提出问题,因此我假设您要么知道为什么会报告此警告和/或如何解决此问题。如果这些都不是您的问题,请澄清。

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

我想下一个问题是为什么当您使用paperclip时Brakeman会报告这一点,所以这可能是安全的。好吧,因为Brakeman对paperclip一无所知。然而,这已经出现了很多次,所以我将研究这是否安全并看到将这种用法列入白名单。

关于如何应对的第二个问题 - 你不需要做任何事情。虽然零Brakeman警告是一个崇高的目标,但总会有误报。对于这个特定的警告,如果不改变Brakeman本身,没有什么可以使这个代码对Brakeman更安全。

如果这篇文章的意图实际上是报告误报,那么open an issue for Brakeman会更好。

[0]我从技术上讲,它会在“例外”表中报告自己的错误,可以在截图中看到。向Brakeman项目报告这些内容可能会有所帮助,看看它们是否可以修复。

答案 1 :(得分:1)

对于误报制动器,您可以使用命令" brakeman -I"来忽略这些警告。每http://brakemanscanner.org/docs/ignoring_false_positives/

浏览他们的工具并回答每个警告的一些问题。最后将文件保存为" config / brakeman.ignore"。下次你跑#34;刹车手"它将运行忽略文件。

答案 2 :(得分:0)

https://stackoverflow.com/a/11267821/1935918中所述,您现在可以通过检查模型属性是否包含在值数组中来避免此错误。