gpt4 book ai didi

ruby-on-rails - Rails Brakeman 警告 : Dynamic Render Path false alarm?

转载 作者:数据小太阳 更新时间:2023-10-29 06:50:14 25 4
gpt4 key购买 nike

我刚刚开始使用 Rails,所以我使用 Brakeman了解我的新手代码中的潜在漏洞。它在我的 show.js.erb 文件中抛出关于以下代码的高置信度“动态渲染路径”警告:

$('#media-fragment').html('<%= escape_javascript(render(params[:partial])) %>');

我实际上预料到这是一个问题,所以不足为奇。所以我将其更改为以下内容:

  # controller:
def show
if legal_partial?
@allowed_partial = params[:partial]
else
raise StandardError, "unexpected partial request: #{params[:partial]}"
end
end

private

def legal_partial?
%w(screenshots video updates).include? params[:partial]
end

# ...
# show.js.erb
$('#media-fragment').html('<%= escape_javascript(render(@allowed_partial)) %>');

虽然我相信代码现在是安全的,但 Brakeman 对此仍然不满意。是否有更惯用的方法来控制基于用户输入的局部渲染?

最佳答案

更新(2016 年 2 月 5 日):

从 Brakeman 3.0.3 开始,这已得到修复。

如果 legal_partial? 方法是这样内联的:

def show
if %w(screenshots video updates).include? params[:partial]
@allowed_partial = params[:partial]
else
raise StandardError, "unexpected partial request: #{params[:partial]}"
end
end

Brakeman 将能够检测到保护条件,并且不再对以后的 render 调用发出警告。


原答案:

不幸的是,Brakeman 不知道 if legal_partial? 是一个合适的守卫。它只知道 params[:partial] 被分配给 @allowed_pa​​rtial,然后传递给 render

您可能知道 @allowed_pa​​rtial 始终是一个安全值。到那时,您必须考虑增加复杂性以使工具满意是否有意义。

举个例子,你可以这样做:

def show
render_allowed_partial params[:partial]
end

def render_allowed_partial name
if %w(screenshots video updates).include? name
@allowed_partial = name
else
raise StandardError, "unexpected partial request: #{params[:partial]}"
end
end

基本上是一样的,除了现在你要对 Brakeman 隐藏 @allowed_pa​​rtial 的赋值。

(警告:这样做不一定是“最佳”方式。)

关于ruby-on-rails - Rails Brakeman 警告 : Dynamic Render Path false alarm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11263976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com