我仍然是网络应用程序开发的新手,所以也许这是一个n00b问题。
似乎大多数网站都会默默地忽略他们不需要也不理解的查询字符串参数。例如,github URI通常如下所示:
https://github.com/airbnb
现在,如果我只是处理伪造的查询字符串,如:
https://github.com/airbnb?foo=bar
页面加载得很好,不会抱怨查询字符串。
这似乎是一个非常合理的行为,我对其他一些网站进行了测试,他们也忽略了无关和/或不需要的查询字符串参数。
我的问题是:
1)这是大多数Web应用程序的正确或事实上的行为吗? (可能答案是肯定的)
2)如果(1)是,那么原因只是常识,惯例,简单等吗?或者像HTTP或REST这样的标准是否有任何指导或兴趣来决定如何处理它?</ p>
替代方案是:
答案 0 :(得分:4)
我在开发Web应用程序时始终遵循的做法是仅执行预期参数的验证。你不应该,恕我直言,甚至阅读/解析你不期望的任何参数,因为可能性实际上是无限的。想象一下,可以执行如下查询:
https://github.com/airbnb?foo=bar
还有:
https://github.com/airbnb?fooo=bar
还有:
https://github.com/airbnb?foooo=bar
所以,如果要拒绝接受的每一个参数,那肯定会有点压倒性的。只是忽略甚至不读它们应该足够安全。
拒绝包含意外参数的请求也会带来其他挑战,例如:Google Analytics(以及其他跟踪解决方案)可能会使用其他参数访问您的网站。
附注:如果您的应用支持重定向,我建议您阅读以下提示,以防万一:http://guides.rubyonrails.org/security.html#redirection
答案 1 :(得分:0)
额外参数的处理(包括发布请求中的查询字符串等内容)完全取决于应用程序。不同的框架表现不同,你不应该依赖任何特定的行为。
如果您正在实施,我建议对参数验证绝对严格。这样,您就不必依赖任何上述行为,并且作为额外的奖励,它可以轻松地为mod_security等webapp防火墙编写规则。
“在接受的内容中采取自由主义”是安全漏洞和互操作性问题的一个秘诀。