加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在没有提交按钮的情况下对ajax请求和表单上的CSRF进行保护

发布时间:2020-12-15 23:13:07 所属栏目:百科 来源:网络整理
导读:我对网络安全很新.我想知道在没有提交按钮(即状态更新)的情况下,在ajax请求和表单上使用令牌的正确方法是什么,以保护CSRF.有人可以给我看一个代码示例吗?我知道如何使用提交按钮正确地处理表单.同样在我的ajax文件夹中,我有一个htaccess与以下内容: SetEnv
我对网络安全很新.我想知道在没有提交按钮(即状态更新)的情况下,在ajax请求和表单上使用令牌的正确方法是什么,以保护CSRF.有人可以给我看一个代码示例吗?我知道如何使用提交按钮正确地处理表单.同样在我的ajax文件夹中,我有一个htaccess与以下内容:
SetEnvIfNoCase X-Requested-With XMLHttpRequest ajax
Order Deny,Allow
Deny from all
Allow from env=ajax

这对于ajax请求是否足够安全,还是我还应该为ajax请求实现令牌安全性?

解决方法

您需要做的就是在页面加载时生成一个秘密(令牌).将其放在页面上,并在会话中.通常我把它作为一个隐藏字段放在表单中,如果我可以,或者如果它是一个更大的非常ajaxy页面的一部分,我会把它放在一个相关元素的值属性,如包装整个页面的div.其他人会添加一个脚本标签,其变量设置为秘密.

然后,无论何时进行AJAX调用或发送表单,都要包含秘密字段. (Cheekysoft的答案详细介绍了如何使用原始JS执行此操作,它可以与jQuery或您可能正在使用的任何其他框架大致相同.)将其与后端的会话值匹配以确保它们仍然存在同样的(来自同一个来源),你很好.

如果您想要增加安全性,请在每个请求上重新生成密钥,并将新密钥与请求的数据一起返回.让所有的ajax请求用新值替换隐藏的字段或值属性.如果您执行大量请求或并发请求,这实际上不会很好.实际上,如果您通过HTTPS执行此操作,那么每次加载整个页面都应该足够了,您应该这样做.

如果你不是通过HTTPS做这件事,那真的没关系,坐在网吧/星巴克的人可以偷走会话并重新加载页面.

如果您打算这么做,那么值得查看jQuery和various plugins,这将有助于为您做CSRF保护. Also,my way isn’t the only way.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读