我正在使用 Ruby on Rails 4.1.1,并且我正在考虑接受直接传递到的参数(通过 URL 查询字符串)url_for
方法,这样:
# URL in the browser
http://www.myapp.com?redirect_to[controller]=users&redirect_to[action]=show&redirect_to[id]=1
# Controller
...
redirect_to url_for(params[:redirect_to].merge(:only_path => true))
采用上述方法,用户可以在执行操作后被重定向。不过,我认为人们可以任意输入params
这可能会导致安全问题......
接受 URL 参数来填充是否安全url_for
方法?什么是陷阱?最坏的情况会发生什么?
通过记录params
在向我的应用程序请求期间,我注意到 Rails 添加了always :controller
and action
参数。也许这证实了url_for
可以按上述方式使用,因为它受到内部保护并且按照 Rails 的预期工作。
这在内部是安全的,因为 Ruby On Rails 只会发出HTTP 重定向响应.
当你正在使用only_path
这将保护您免受打开重定向脆弱性。这是攻击者发送的电子邮件,其中包含以下格式的链接(假设您的网站是example.com
).
https://example.com?foo=bar&bar=foo&redirect=http://evil.com
当用户检查 URL 并看到它位于example.com
他们认为单击该链接是安全的。但是,如果存在开放重定向,则用户最终会到达evil.com
这可能会要求他们example.com
在用户不注意的情况下设置密码。
仅重定向到您站点上的相对路径可以修复任何漏洞。
在您的情况下,您将让用户控制您的控制器、操作和参数。只要你的 GET 方法是safe(即没有副作用),攻击者无法通过创建用户打开的精心设计的链接来使用此功能。
总之,根据提供的信息,我没有看到您的应用程序存在网络钓鱼 URL 的任何风险。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)