在提交 Ajax 时生成 CSRF 令牌 codeigniter

2023-12-03

您好,我正在寻找使用 ajax 提交表单时在 codeigniter 中重新生成 csrf 令牌的过程。我希望在不刷新页面的情况下重新生成令牌。有什么办法可以做到这一点吗?


我根据情况在不同时间使用两种解决方案。

1. 方式有点乱,但推荐

获取控制器中的令牌名称和哈希值,并将其设置在页面上的某个位置作为数据字段(无论您选择何处)。例如

 // get the data and pass it to your view
 $token_name = $this->security->get_csrf_token_name();
 $token_hash = $this->security->get_csrf_hash();

 // in your view file, load it into a div for instance
 <div id="my_div" data-token="<?php echo $token_name; ?>" data-hash="<?php echo $token_name; ?>"

现在,在您的 js ajax 代码中,您只需读取“my_div”中的数据值即可为您的 ajax 调用获取正确的数据。

如果你的页面上有一个真正的表单,那就更容易了,在这种情况下,不要使用一些div,只需不要在表单上使用form_open,而是自己创建隐藏的表单字段,这样你就可以通过js轻松读取它。

 <input type="hidden" id="my_data" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />

这是重要的一点:当然,在发送发布数据后,您需要刷新令牌哈希值(在表单输入字段或 div 数据中,无论您选择这样做)。编写一个名为“refresh_csrf_data”的js函数,并使用“GET”来获取数据并更新字段。每当您完成 ajax post 时就可以调用此函数。

因此,每个 ajax 调用都会读取令牌数据,执行调用,然后刷新令牌数据,为下一次调用做好准备。

2. 简单但安全性较差

或者,您可以使用以下命令禁用 ajax 调用的 CSRF

 $config['csrf_exclude_uris'] = array('controller/method');

在 CSRF 设置的配置文件中。

3. 更简单,但安全性也较差,我不使用它最后,您可以关闭每次提交时重新生成 CSRF 哈希

 $config['csrf_regenerate'] = FALSE;

但是,请谨慎行事。这可能会让您面临某些类型的攻击。

最适合您的答案完全取决于页面的类型、使用情况、用户当时是否登录、是关键任务还是次要内容、是财务等。

没有什么是完全安全的,所以有时这是一种妥协。就我个人而言,我会在完全重新生成时使用 CSRF 来完成此操作,URI 中也不例外,并在需要时重新加载令牌和哈希数据。这看起来很复杂,而且需要解释,但是一旦您完成了一次,每当您需要时,就真的很容易一次又一次地执行,并且您的网站将比简单地避免其他选项的问题安全得多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在提交 Ajax 时生成 CSRF 令牌 codeigniter 的相关文章

  • Codeigniter 处理大文件时允许的内存大小耗尽

    我发布此内容是为了防止其他人正在寻找相同的解决方案 因为我刚刚在这个废话上浪费了两天时间 我有一个 cron 作业 每天使用一个非常大的文件更新数据库一次 使用以下代码 if handle fopen dirname FILE uncomp
  • 更新查询增量字段加上 1 codeigniter 函数 [重复]

    这个问题在这里已经有答案了 我想在 codeigniter 项目中将字段值增加到当前值加 1 所以 我做了一个功能 但它不起作用 我的职能是 function increse field by 1 table name fieldToInc
  • 使用控制器通过 codeigniter 处理返回的自定义 css 和 javascript 文件

    我正在开发一个 php codeigniter 项目 我正在考虑创建一个专门用于处理返回自定义 css 和 javascript 文件的控制器 在之前的项目中 我在视图文件的标头中包含了外部 CSS 和 JS 文件 但它们本质上必须是静态的
  • 将数据库中的用户 ID 添加到 Codeigniter 中的会话数据中?

    我是 CodeIgniter 的新手 在从数据库添加用户 ID 用户登录后 到会话数据时遇到问题 这是我的代码问题 之前可能会在 SOF 上被问到 在付出了所有努力之后 我问这个 登录模型
  • 如何在 CodeIgniter 中加载类/库?

    我有一个图书馆叫lib 其中包含一个名为nusoap php 我已经将lib放入文件夹中应用程序 库 当我尝试加载它时 出现以下错误 An Error Was Encountered Unable to load the requested
  • 重定向到上一页时如何发送变量数据

    在完成特定任务后 我使用以下代码将用户重定向到上一页 if isset SERVER HTTP REFERER this gt session gt set userdata previous page SERVER HTTP REFERE
  • Codeigniter PHP - 在锚点加载视图

    我在一个长页面的底部有一个表单 如果用户填写了表单但它不验证页面是否以典型的 codeigniter 方式重新加载 this gt load gt view template data 然而 由于表单位于页面底部 我需要将页面加载到那里 就
  • 如何删除Wamp中的index.php?

    我一直在 XAMPP 中使用 CodeIgniter 重定向到函数 URL 没有问题 例如 功能1 http localhost function1 当我换成WAMP时 我遇到了问题 我无法重定向到功能1 然而 功能1仍可在以下位置访问 h
  • Codeigniter:使用数据网格

    我正在寻找使用 CI 实现数据网格 如果使用 ajax 会更好 在Google上搜索我发现了很多关于如何使用的教程和讨论Flexigrid 4 CI or jqGrid 无论如何 我仍然对哪一个可以提供更大的灵活性感到困惑 例如 是否可以设
  • Codeigniter 中的多个查询[重复]

    这个问题在这里已经有答案了 可能的重复 MYSQL在codeigniter中多次插入 https stackoverflow com questions 2790638 mysql multiple insert in codeignite
  • 在 Codeigniter 中显示来自连接的数据

    我正在使用简单的联接从两个数据库中提取数据 这是模型中的连接 function com control this gt db gt select this gt db gt from comments this gt db gt join
  • mysql 数据库更新和 codeigniter 行受影响的功能[重复]

    这个问题在这里已经有答案了 我在更新查询后使用此功能此 codeigniter 功能 this gt db gt affected rows 如果我更新值 它会返回受影响的行数 但如果我更新与之前相同的值 它会返回 0 受影响的行 任何帮助
  • Codeigniter 在助手中获取控制器名称

    我有一个用于记录的自定义助手 在助手的功能之一中 我需要获取被调用的控制器的名称 有办法做到吗 我不能依赖 uri 段 因为一些控制器位于子文件夹中 并且助手被到处使用 您可以在 CI2 x 中使用以下内容 this gt router g
  • 为什么onClick下一个视频函数,使用YouTube JavaScript Player API,质量下降到默认?

    我在 CodeIgniter 上遇到了这个问题 使用 next video API 函数 单击按钮时新视频的质量比以前的低 所以基本上第一个视频始终处于我建议的质量 而下一个始终处于默认质量 On my template我有这个div di
  • CodeIgniter加入选择为

    我的数据库中有 2 个表需要加入 一张表是 artikelen 表 另一张表是 Collections 表 我目前有 this gt db gt select this gt db gt from collecties this gt db
  • 如何在javascript中获取基本url

    我正在建立一个网站代码点火器 http ellislab com codeigniter 我有各种资源 我用base url http ellislab com codeigniter user guide helpers url help
  • 登录后,Codeigniter 会话数据在其他页面不可用

    因此 我设置了一个登录页面来验证用户的凭据 然后设置 codeigniter 会话数据 email 和 is logged in 以及其他一些项目 登录后第一页 数据即可访问 在该页面之后 我无法再访问会话数据 事实上 如果我尝试重新加载第
  • 如何让 CodeIgniter 接受“查询字符串”URL?

    根据 CI 的文档 CodeIgniter 使用基于分段的方法 例如 example com my group 如果我想找到一个特定的组 id 5 我可以访问 example com my group 5 并在控制器中定义 function
  • 扩展 Codeigniter Exceptions 类以添加自定义方法

    我创建了一个新方法来处理 401 apache 错误 我的核心类扩展了 CI 核心类 但是当我调用方法名称时 我收到此消息 致命错误 调用未定义的函数show 401 in G Path application controllers lo
  • 将 csv 上传到 Codeigniter

    还有其他人在将 csv 文件上传到 Codeigniter 时遇到问题吗 我收到一条非常烦人的消息 不允许您尝试上传的文件类型 错误 即使我已经非常明确地设置了上传类型 这是我的代码 应该是相当标准的东西 function doUpload

随机推荐