4
我需要将CSRF保护添加到Web应用程序。CSRF保护GET链接
问题在于,应用程序严重依赖链接(GET请求)来更改数据库。
链接是使用类生成的,所以我可以轻松地为每个链接添加一个额外的CSRF令牌参数。
但是,我知道GET请求中的CSRF令牌可能不是一个足够好的保护。
请注意,应用程序只能通过HTTPS使用,因此GET参数无法在客户端/服务器通信期间暴露/被盗(但仍存在历史盗取问题)。
可以在此设置中将GET CSRF令牌参数视为“足够安全”吗?
如果不是,解决此问题的最佳方法是什么?唯一让我想到的是将每个链接都包装到一个表单中(以太,或者使用JavaScript创建表单onSubmit)。
GET请求*被*用于修改数据,这是我的问题。重构停止使用GET请求进行数据修改不是一种选择,所以我的问题是GET + csrf token + https是否“足够安全”,或者我应该(以及如何)正确地将GET请求更改为POST请求“ 。 – h9lpq0u
在您重构具有该级别的保护之前,它可能没有问题。但它并不完全安全。您会发现,cookie中的csrf标记可以使用JavaScript代码进行抽取,并且可以在用户会话中用于错误执行。我不是100%自信这个..但检查这两个链接来决定 - http://stackoverflow.com/questions/2769992/replay-attacks-for-https-requests和https://www.owasp.org/的index.php /交叉Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#Disclosure_of_Token_in_URL。我不知道任何将GET转换为POST的方式。 – ddb
感谢您的评论。关于将GET转换为POST,因为我使用class Link创建链接,所以我可以在一个地方更改所有链接的格式。我脑海中有两种方法。例如,我可以添加onclick javascript代码,它可以创建表单,从GET链接添加所有参数,并提交表单。或者我可以将链接包装在表单元素中,添加隐藏的参数并更改链接行为,以便它只提交该表单。 – h9lpq0u