【问题标题】:Rails 5 - Can anyone explain how generating a URL from non-sanitized request parameters is unsafe?Rails 5 - 任何人都可以解释如何从未经清理的请求参数生成 URL 是不安全的吗?
【发布时间】:2016-08-25 18:59:06
【问题描述】:

假设我有以下内容:

link_to "Excel", params.merge(format: 'xlsx')

Rails 5 说,

试图从未经过滤的请求参数生成 URL!攻击者可以将恶意数据注入生成的 URL,例如更改主机。白名单并清理传递的参数以确保安全。

我想我不明白这是怎么不安全的。任何人都可以在浏览器中键入他们想要的任何内容,然后向我的服务器执行 GET 请求。有什么区别?

我知道我可以通过 permit! 解决它我想要了解的是清理我的参数所完成的工作。

【问题讨论】:

  • @coreyward Rails 使用 CSRF 令牌进行 POST,我说的是 GET 请求。该消息抱怨我在我的网站上生成的 URL,所以通过 CSRF,你是否提议攻击者在我的网站上制作一个 url,当访问该 URL 时包含生成的 url 来攻击其他网站?

标签: security ruby-on-rails-5


【解决方案1】:

您应该查看来自 OWASP 和 Rails itself 的文档。

通过使用permit,您有机会禁止设置您不希望传递给您的 url 助手的属性。

考虑以下来自 Twitter 帖子的指向您的网站的链接:

http://example.com/your/action?host=phishingscam.example&path=login

如果你的代码看起来像这样,你就有麻烦了:

link_to 'View Something', params.merge(format: 'xlsx')

现在链接转到:

http://phishingscam.example/login.xlsx

攻击网站 phishingscam.example 可以将内容类型设置为 text/html 并呈现一个看起来像您的登录表单的页面。刚才在您的站点上并单击以查看您站点上的某些内容的用户认为他们已注销并需要再次登录。现在我们的攻击者拥有了用户凭据,并且可以将它们重定向回适当的链接,而用户完全不知道发生了什么。

这是一个简单的场景。事情很快就会变得复杂。您应该read the Rails security guide 了解更多信息。

【讨论】:

  • 感谢您的解释,这很有帮助。我实际上已经阅读了 Rails 安全指南,除非我是盲人,否则它不会提及这一点(重定向点类似)。除了这里和一些人抱怨 Kaminari google 的预更新版本之外,也出现了短缺。如果您知道 Rails 更改日志或博客文章解释了将我的参数列入白名单的正确技术,我很乐意阅读它。
  • @JPDuffy 我看到你找到了已经添加消息的提交。 ;)
  • 是的。 :) 我不禁觉得应该有更好的方法来做到这一点。 github.com/rails/rails/commit/…
  • @JPDuffy All permit 正在为您提供一种优雅的输入净化方式。您也可以使用其他选项,例如 slice 或手动组装参数。您通常不想将所有用户输入传递给内部方法。这甚至不是特定于 Ruby 的,只是一个很好的开发实践。
【解决方案2】:

简单的方法:

如果你有这样的事情:

link_to title, params.merge(:sort => column, :direction => direction, :page => nil), {:class => css_class}

您必须在 permit 中包含参数。

你可以用这个:

link_to title, params.permit(:direction, :page).merge(:sort => column, :direction => direction, :page => nil), {:class => css_class}

瞧!!

【讨论】:

    猜你喜欢
    • 2016-03-28
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多