微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有 params[:controller] 的动态 link_to 路径:Brakeman Dangerous Send

如何解决带有 params[:controller] 的动态 link_to 路径:Brakeman Dangerous Send

我的代码中多次使用了以下部分 _filters.html.haml

- resource ||= params[:controller]
= link_to send("delete_#{resource}_path"),method: :delete,data: { confirm: delete_confirmation } do
   = fa_icon delete_icon,class: 'm-r-quarter',text: delete_text

它有一个由 params[:controller] 构造的动态删除路径。 Brakeman 针对上述代码给出了以下错误信息:

Confidence: High
Category: Dangerous Send
Check: Send
Message: User controlled method execution
Code: send("delete_#{params[:controller]}_path")

这是 Brakeman 显示的有效错误吗?我知道将参数列入白名单是避免危险发送的一种解决方案。有没有更好的方法解决这个问题?

解决方法

这实际上不允许用户控制的方法执行,因为 params[:controller]params[:action] 是由 Rails 路由器设置的,并且会覆盖任何用户提供的值。

虽然很臭。使用 controller_name 辅助方法可以稍微改进一下:

= link_to send("delete_#{controller_name}_path"),...

但这确实引出了一个问题,为什么你一开始就对自己造成这种怪物。这甚至应该做什么,因为它缺少一个 id - 摧毁一切?

如果要销毁 Rails 中的资源,请向成员路径发送 DELETE 请求:

DELETE /things/1

由于 URL 中没有愚蠢的前缀,您可以使用以下命令生成它:

= link_to(model_instance,method: :destroy) do
  = fa_icon delete_icon,class: 'm-r-quarter',text: delete_text

如果您确实需要动态生成路径,请使用 the polymorphic route helpers 而不是发送:

= link_to [:delete,controller_name],method: :delete,data: { confirm: delete_confirmation } do
  = fa_icon delete_icon,text: delete_text

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?