ruby 制动员警告:“link_to”href中的参数值不安全,即使在清理参数后也是如此

toe95027  于 2023-01-25  发布在  Ruby
关注(0)|答案(2)|浏览(95)

我的html.haml视图中有以下代码:

= link_to params[:returnurl], class: "btn btn-secondary" do
    = fa_icon 'chevron-left', class: 'm-r-quarter', text: 'Cancel'

当我运行brakeman时,我得到以下警告:

Confidence: High
Category: Cross-Site Scripting
Check: LinkToHref
Message: Unsafe parameter value in `link_to` href

即使在如下所示使用sanitize之后,它仍然给我同样的警告:

= link_to sanitize(params[:returnurl]), class: "btn btn-secondary" do
    = fa_icon 'chevron-left', class: 'm-r-quarter', text: 'Cancel'

我很困惑为什么我还能得到它,我该如何解决它。谢谢。

bn31dyow

bn31dyow1#

通常不存在使用传入参数作为链接的href值来创建链接的安全。
想象一下,一个邪恶的代理可以发送一个链接到您的页面,其中returnurl参数指向一个站点,他们可以在那里钓鱼从您的用户的详细信息或returnurl可以使用javascript:,然后将用户cookie数据传递到他们的服务器和劫持会话。
你可能需要重新考虑它的设计,这样就不需要把returnurl作为参数,理想情况下你可以从其他信息中推断出它,在用户会话中存储url是一个模糊的选项,但这仍然可能被利用。

7kqas0il

7kqas0il2#

如果您希望至少保护javascript:或类似的不安全值,下面是我添加到ApplicationHelper中的一个方法,以确保URI方案为http

module ApplicationHelper
  def safe_url(url)
    uri = URI.parse(url)

    uri.to_s if uri.is_a?(URI::HTTP)
  rescue URI::InvalidURIError
    nil
  end
end

这不会像Mark Meyer提到的那样保护带有恶意内容的URL,但确实增加了一点保护。

相关问题