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

前端之家收集整理的这篇文章主要介绍了在没有提交按钮的情况下对ajax请求和表单上的CSRF进行保护前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对网络安全很新.我想知道在没有提交按钮(即状态更新)的情况下,在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.

猜你在找的Ajax相关文章