gpt4 book ai didi

php - 在基于 AJAX 的应用程序中使用 token 防止 CSRF

转载 作者:行者123 更新时间:2023-12-04 21:24:30 25 4
gpt4 key购买 nike

我在我的应用程序中使用 token 来防止 CSRF 攻击。但是这个应用程序是单页的,并且严重基于 AJAX,所以我需要找到一种方法来为单个页面中的 N 个操作提供有效的 token :

例如一个文档片段加载了 3 个可能的操作,每个操作都需要一个 token 才能正常工作,但服务器端一次只有一个有效 token ...

因为每个标记只是一个 encrypted nonce (值不是基于特定的形式),我想到了用这样的东西为每个 Action 自动分配 token :

  1. 应用程序拦截 AJAX 调用,并检查它是否是敏感操作(即删除用户)
  2. 在操作继续之前向服务器请求 token
  3. 生成 token ,然后添加到操作请求中
  4. 自请求包含有效 token 后执行的操作
  5. 对通过 AJAX 执行的任何后续操作执行相同的操作

我认为该方法不够有效,因为攻击者可以使用与我的应用完全相同的脚本(检索 token 并附加到请求)。

如何改进我的方法以有效抵御 CSRF 攻击?

附加信息:我的后端环境是 PHP/Phalcon并且标记是 generated using Phalcon .

最佳答案

比仅对 AJAX 使用 token 更简单的方法可能是检查只能出现在来自您自己域的 AJAX 请求中的 header 。

两个选项是:

Origin header 也可用于普通的 HTML 表单提交,您需要在处理表单提交之前验证它是否包含您自己站点的 URL。

如果您决定检查 X-Requested-With header ,您将需要确保将其添加到每个 AJAX 请求客户端(JQuery 将默认执行此操作)。由于此 header 不能跨域发送(未经您的服务器首先同意浏览器),检查它是否存在并设置为您自己的值(例如“XMLHttpRequest”)将验证请求是否不存在CSRF 攻击。

关于php - 在基于 AJAX 的应用程序中使用 token 防止 CSRF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23448007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com