1. /**
  2. * Set CSRF Hash and Cookie
  3. *
  4. * @return string
  5. */
  6. protected function _csrf_set_hash()
  7. {
  8. if ($this->_csrf_hash === NULL)
  9. {
  10. // If the cookie exists we will use its value.
  11. // We don't necessarily want to regenerate it with
  12. // each page load since a page could contain embedded
  13. // sub-pages causing this feature to fail
  14. if (isset($_COOKIE[$this->_csrf_cookie_name]) && is_string($_COOKIE[$this->_csrf_cookie_name])
  15. && preg_match('#^[0-9a-f]{32}$#iS', $_COOKIE[$this->_csrf_cookie_name]) === 1)
  16. {
  17. return $this->_csrf_hash = $_COOKIE[$this->_csrf_cookie_name];
  18. }
  19.  
  20. $rand = $this->get_random_bytes(16);
  21. $this->_csrf_hash = ($rand === FALSE)
  22. ? md5(uniqid(mt_rand(), TRUE))
  23. : bin2hex($rand);
  24. }
  25.  
  26. return $this->_csrf_hash;
  27. }

    令牌(tokens)默认会在每一次提交时重新生成,或者你也可以设置成在 CSRF cookie 的生命周期内一直有效。———— 有安全隐患吧。 这样会减少服务器的负荷.

默认情况下令牌重新生成提供了更严格的安全机制,但可能会对 可用性带来一定的影响,因为令牌很可能会变得失效(例如使用浏览器的返回前进按钮、 使用多窗口或多标签页浏览、异步调用等等)。你可以修改下面这个参数来改变这一点。

  1. $config['csrf_regenerate'] = TRUE;  //这种情况下,每次提交表单后,都会重新生成token。(1) 重复提交一个页面会失败。(2)用浏览器的返回前进按钮,会因为令牌不一致出错。—— 生成了新的令牌值,而“后退”过去的那个页面不刷新的话,依然使用的是旧的令牌值!
  1.   将其设置为false即可。
  1.       $config['csrf_expire'] = 7200;    
          $config['csrf_regenerate'] = false;
  1.  

CI - Set CSRF Hash and Cookie的更多相关文章

  1. Day19 Django之Form表单验证、CSRF、Cookie、Session和Model操作

    一.Form表单验证 用于做用户提交数据的验证1.自定义规则 a.自定义规则(类,字段名==html中的name值)b.数据提交-规则进行匹配代码如下: """day19 ...

  2. Django之Cookie、Session、CSRF、Admin

    Django之Cookie.Session.CSRF.Admin   Cookie 1.获取Cookie: 1 2 3 4 5 6 request.COOKIES['key'] request.get ...

  3. Java解决CSRF问题

    项目地址: https://github.com/morethink/web-security-csrf CSRF是什么? CSRF(Cross-site request forgery),中文名称: ...

  4. 应用安全-Web安全-CSRF攻防整理

    原理 - 登录受信任网站A,并在本地生成Cookie.在不登出A的情况下,访问危险网站B. #csrfdemo.php <?php $data = json_decode(file_get_co ...

  5. JavaScript 跨站伪造请求-CSRF

    CSRF: Cross-Site Request Forgery CSRF 概念 `定义`: 是一种对网站的而已利用,也被称之为one-click-attack 或者 session riding, ...

  6. ci 基础知识

    //建立虚拟主机 2.下载完毕后,解压,并将其复制粘贴到程序的主目录(d:/wamp/xmall/),然后再将其重命名为"myshop",那么"myshop" ...

  7. cookie那些事

    本文面向对cookie有基本了解的读者,小白出门左转   设置cookie (HTTP 响应头) Set-Cookie: {name}={value};path={path};domain={doma ...

  8. PHP弱类型:WordPress Cookie伪造

    1 PHP弱类型 PHP是弱类型语言,所以变量会因为使用场景的不同自动进行类型转换.PHP中用 == 以及 != 进行相等判断时,会自动进行类型转换,用 === 以及 !== 进行判断时不会自动转换类 ...

  9. 带你了解CSRF和XSS(二)

    什么是CSRF? CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XS ...

随机推荐

  1. INSERT ... ON DUPLICATE KEY UPDATE产生death lock死锁原理

    前言 编辑 我们在实际业务场景中,经常会有一个这样的需求,插入某条记录,如果已经存在了则更新它如果更新日期或者某些列上的累加操作等,我们肯定会想到使用INSERT ... ON DUPLICATE K ...

  2. .Net 第一章笔记

    1.深入.NET框架 对象数组 登录和注册 内存级别数据的拎取 1..NET 战略 Java领域:::::SQL Server不会用到 浏览器IE 口号:任何人 在任何地方 使用任何终端,,都可以使用 ...

  3. CodeSmith Generator 7.0.2

    [工具]CodeSmith Generator 7.0.2激活步骤 只看楼主 收藏 回复     M炎骫毒逆天T   c#攻城狮 8   学过三层的人应该认识CodeSmith Generator吧, ...

  4. 慢慢积累遇到的linux指令

    sudo 用来以其他身份来执行命令,预设身份为root sudo apt install git 下载git sudo root 进入root身份(只有这个身份ubuntu和window系统之间才能共 ...

  5. tar.gz

    tar.gz,或者.tgz的文件一般是在UNIX下用tar和gunzip压缩的文件.可能的文件名还有.tar.gz等.gunzip是一种比pkzip压缩比高的压缩程序,一般 UNIX下都有.tar是一 ...

  6. 解决 FusionCharts3.2.1 首页无法载入的问题

    在实际项目中测试FusionCharts3.2.1时,发现首次载入无法正常载入,第二次载入就恢复正常!   原因:FusionCharts ID与变量名重复   以下是正常写法: var member ...

  7. 不同版本的 Tomcat 设置用户名密码 的方法

    Tomcat : tomcat根目录\conf\tomcat-users.xml,找到 <tomcat-users> 标签,在后面添加 <user username="ad ...

  8. C#调用Lame.exe

    string lameEXE = @"D:\lame3.100\lame.exe"; string lameArgs = "-b 128"; string wa ...

  9. linx vim 文件操作 ubuntu server 软件源

    mv /etc/danted.conf /etc/danted.conf.bak sudo wget https://files.cnblogs.com/files/marklove/danted.t ...

  10. asp.net core vs2017运行控制台应用程序一闪而过没执行

    在cmd中执行dotnet run,会提示当前应用程序版本高于当前安装的.net core sdk 版本 解决: 升级.net core版本到最新