我的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'
我很困惑为什么我还能得到它,我该如何解决它。谢谢。
2条答案
按热度按时间bn31dyow1#
通常不存在使用传入参数作为链接的
href
值来创建链接的安全。想象一下,一个邪恶的代理可以发送一个链接到您的页面,其中
returnurl
参数指向一个站点,他们可以在那里钓鱼从您的用户的详细信息或returnurl
可以使用javascript:
,然后将用户cookie数据传递到他们的服务器和劫持会话。你可能需要重新考虑它的设计,这样就不需要把
returnurl
作为参数,理想情况下你可以从其他信息中推断出它,在用户会话中存储url是一个模糊的选项,但这仍然可能被利用。7kqas0il2#
如果您希望至少保护
javascript:
或类似的不安全值,下面是我添加到ApplicationHelper
中的一个方法,以确保URI方案为http
:这不会像Mark Meyer提到的那样保护带有恶意内容的URL,但确实增加了一点保护。