从哲学上讲,我习惯于总是将GET用于不改变状态的HTTP请求,而POST则用于执行请求。但是,最近我遇到了一些困难,导致我做出例外。我很好奇是否存在使用错误的HTTP动词的任何非哲学缺点,例如跨站点攻击等安全问题。
我想触发下载动态打包到存档中的请求文件列表。但是,文件列表可能会变得如此之大,以至于在URL中编码为查询字符串参数时,它们会超出Internet Explorer中的URL长度限制。为了解决这个问题,我最终用POST来触发下载。
无论您是否登录,都会始终显示一个按钮,但只有在您登录时才能更改状态。如果您在未登录时按此按钮,则会被带到带有查询字符串参数的登录页面,指示您打算下一步的位置。当您登录时,它会将您重定向到那里以完成您的操作。但是,重定向只能生成GET,而不能生成POST。所以我们允许GET在这种情况下改变状态。
这些例外是否有任何漏洞或缺点?这些是否允许通过检查引用标头无法阻止的任何跨站点请求伪造场景?
答案 0 :(得分:0)
回答主题中的问题:是
异常#1:GET请求可以有一个正文。您不必将所有内容都放在URL
中异常#2:更改表单以在未登录时使用GET并在登录时使用POST。
不建议使用referer。有各种各样的解决方法,一些公司软件剥离它以保护隐私。 我强烈推荐基于令牌的CSRF缓解方法。