postOnly在以下属性中的含义
grails.plugin.springsecurity.logout.postOnly=false?
为什么Logout工作会出错?尝试使注销功能正常工作。但它没有用。造假的原因是什么?
答案 0 :(得分:3)
首先,请阅读插件文档 - 2.x文档为here,3.x文档为here。
该插件默认需要POST请求注销,但使用您引用的配置设置,您可以通过允许GET或POST请求使您的应用程序使用更方便,但安全性更低。
GET请求(例如常规链接)应该用于读取数据的操作。严格的REST API要求GET请求是只读的并且也是幂等的,但显然在常规Web应用程序中这太严格了。但一般来说,最好使用链接和GET请求来请求信息,以及POST / PUT / DELETE /等。请求进行更改。
如果您包含使用GET发出请求的注销链接,则使用XSS或类似攻击的人可能会欺骗您的浏览器将您注销。这不是一个严重的漏洞,并且要求POST不会使攻击者更加困难,但它确实提高了标准。
使用默认配置,您需要做的就是使用一个简单的表单替换注销链接,该表单POST到同一个URL(如果需要,您可以选择使用CSS来设置提交按钮的样式,如果您想要)。如果您对允许用户使用GET请求注销感到满意,请将设置更改为false,并且对该URL的任何请求都将起作用。
答案 1 :(得分:0)
一旦你将其变为现实
grails.plugin.springsecurity.logout.postOnly=true
请求方法类型应仅为POST,即您不能使用GET方法。 因此,在这种情况下,请将注销调用更改为POST类型。
您还可以查看How to customize Grails Spring Security Core 2 login / logout controller and views?
答案 2 :(得分:0)
默认情况下,Spring Security要求注销使用POST请求来提供CSRF protection。有关CSRF的更多信息,请参阅Wikipedia。
答案 3 :(得分:0)
postOnly在以下属性中的含义
我的意思是,如果您向注销网址发送POST请求,Grails将仅注销用户。
为什么Logout工作会出错?
它主要用于CSRF保护。
最佳做法是在任何操作上使用HTTP POST 改变状态(即注销)以防止CSRF攻击。如果你 真的想使用HTTP GET,你可以使用logoutRequestMatcher(new AntPathRequestMatcher(logoutUrl," GET"));
此外,像Chrome这样的现代浏览器会在用户尝试访问 之前 在页面中预加载链接以使其快速生成。这意味着如果您使您的注销链接接受GET请求,即使您不想,Chrome也可能会将您注销。