Rails 5 - 任何人都可以解释如何从未经过清理的请求参数生成URL是不安全的吗?

JP *_*ffy 6 security ruby-on-rails-5

说我有以下内容:

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

Rails 5说,

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

我想我不明白这是不安全的.任何人都可以在浏览器中输入他们想要的任何内容,无论如何都要对我的服务器执行GET请求.有什么不同?

我知道我可以解决它permit! 我正在努力理解的是消毒我的参数完成了什么.

cor*_*ard 8

您应该查看OWASP以及Rails本身的文档.

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

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

http://example.com/your/action?host=phishingscam.example&path=login
Run Code Online (Sandbox Code Playgroud)

如果您的代码看起来像这样,那么您就遇到了麻烦:

link_to 'View Something', params.merge(format: 'xlsx')
Run Code Online (Sandbox Code Playgroud)

现在链接转到:

http://phishingscam.example/login.xlsx
Run Code Online (Sandbox Code Playgroud)

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

这是一个简单的场景.事情很快就会变得复杂.您应该阅读Rails安全指南以了解更多信息.