ajax - 在没有提交按钮的情况下防止针对ajax请求和表单的CSRF

标签 ajax security token csrf

我对网络安全还很陌生。我想知道什么是在ajax请求和表单上使用 token 而没有提交按钮(即状态更新)来保护CSRF的正确方法。有人可以给我看代码示例吗?我知道如何针对带有提交按钮的表单正确执行此操作。同样在我的ajax文件夹中,我还有一个htaccess文件,其中包含以下内容:

SetEnvIfNoCase X-Requested-With XMLHttpRequest ajax
Order Deny,Allow
Deny from all
Allow from env=ajax

这样对于ajax请求是否足够的安全性,还是我也应该对ajax请求实现 token 安全性?

最佳答案

您需要做的就是在页面加载时生成一个 secret ( token )。将其放在页面上和 session 中。通常,如果可以的话,或者如果它是较大的ajaxy页面的一部分,则将其作为隐藏字段形式放置在表单中,然后将其放置在相关元素的value属性中,例如div包裹整个页面。其他人将添加一个脚本标签,并将变量设置为 secret 。

然后,每当您进行AJAX调用或发送表格时,都应包含一个密码字段。 (Cheekysoft的答案详细介绍了如何使用原始JS进行此操作,可以使用jQuery或您可能使用的任何其他框架进行大致相同的操作。)将其与后端的 session 值进行匹配,以确保它们仍然存在相同(来自相同来源),您就很好。

如果要增加安全性,请在每个请求上重新生成 key ,然后将新的 key 与请求的数据一起返回。让您所有的ajax请求都用新值替换该隐藏字段或值属性。如果您正在执行大量请求或并发请求,则此方法实际上不能很好地工作。实际上,如果要通过HTTPS执行此操作,则每次加载整个页面时都生成一个就足够了。

如果您不是通过HTTPS进行此操作,那么这没关系,坐在网吧/星巴克的人可以窃取 session 并重新加载页面。

如果您打算做很多事情,那么值得检查一下jQuery和various plugins,它们将帮助您进行CSRF保护。 Also, my way isn't the only way.

关于ajax - 在没有提交按钮的情况下防止针对ajax请求和表单的CSRF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10143502/

相关文章:

javascript - 使用 CodeIgniter 和 Ajax 以及多个输入字段在每个输入中上传多个文件

c - 在 ret2ret 漏洞上执行 shellcode

amazon-web-services - 通过 AWS STS token 授予对存储桶中单个文件夹的访问权限

python - 如何创建一个对单词进行标记和词干处理的函数

javascript - 检测 ReactJS 页面更改

javascript - 如何将 JMVC (javascript-mvc) 和服务器端 MVC 结合在一起

jquery - 进度条未正确显示 - 使用 ajax 上传文件

c# - 签名算法: itu-t?是什么意思

java - 在websphere本地信任库中添加证书;以编程方式

java - 运行 JJWT Json token 时出现运行时或类错误