Brakeman警告:即使在清除参数后,`link_to`href中的参数值也不安全



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

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

当我运行制动员时,我会收到以下警告:

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'

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

通常没有保险箱来使用传入的参数作为链接的href的值来创建链接。

想象一下,一个邪恶的代理可以向你的页面发送一个链接,其中returnurl参数指向一个他们可以从你的用户详细信息中钓鱼的网站,或者returnurl可以使用javascript:,然后将用户cookie数据传递到他们的服务器并劫持会话。

您将需要重新考虑此项的设计,这样就没有必要将returnurl作为参数。理想情况下,你可以从其他信息中推断出来。在用户的会话中存储url是一个模糊的选项,但这仍然可能被利用。

如果您想至少保护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,但确实增加了一些保护。

相关内容

  • 没有找到相关文章

最新更新