zoukankan      html  css  js  c++  java
  • CSRF跨站点请求伪造漏洞问题

    最近在写php,项目写完后送检发现一个漏洞问题CSRF,强行拖了我一天的时间,沉迷解决问题,茶饭不思,日渐消瘦,时间比较赶,这篇比较糙,凑合看下。

    好了废话不多说下面是今天的解决方案。

    博主用的是Thinkphp框架,发现这个问题的时候第一件事就是去查下相关资料,发现发现网上说可以通过表单令牌来解决这个问题。

    如果不设置表单令牌,很容易导致CSRF(跨站请求伪造)、跨站提交表单。

    表单令牌是一种非常实用的技术(博主ps:其实鸡肋),它在表单的视图部分生成随机令牌,默认为随机的MD5串,存在hidden的input中。在表单数据提交前,将提交的数据与SESSION中存放的令牌进行比对,从而判断是否是跨站提交。

    ThinkPHP中开启表单令牌的方式比较简单,在config中进行配置(博主的路径:项目/Home/Conf/config.php):

            'TOKEN_ON'=>true,  // 是否开启令牌验证
        'TOKEN_NAME'=>'__hash__',    // 令牌验证的表单隐藏字段名称
        'TOKEN_TYPE'=>'md5',  //令牌哈希验证规则 默认为MD5
        'TOKEN_RESET'=>true,  //令牌验证出错后是否重置令牌 默认为true    

    添加完成上面的代码后还需要在tags.php配置一波。ps:有的小伙伴没有tags.php可以在项目/Common/Conf目录下新建一个tags.php插入以下代码

    <?php
    return array(
        //'配置项'=>'配置值'
        'view_filter'=>array('BehaviorTokenBuildBehavior'),
    );

    然后你就可以在你的所有表单页面看到

    <input type="hidden" name="__hash__" value="11f6b3285bf71a87811c3dadccb7b166_c6694a7c3a76bbf9ac7bf66a77d87310" />这个。

    如果你只想在部分页面的表单加入表单令牌你可以:

    C(‘TOKEN_ON’,false);
    
    $this->display();

    配置完成后在你的表单提交地址指向的方法里面加入下面代码:

    if(!$Data->autoCheckToken($_POST)){  
               $this->error('非法登陆!');
               }

    上面的$Data是model

    今天先写到这里要写代码了。

  • 相关阅读:
    SDOI2017遗忘的集合
    菜鸡的考场emacs配置
    SDOI2017苹果树
    SDOI2017硬币游戏
    都11点了为什么还没有人阿克离场
    TJOI2013数字根
    HNOI2018毒瘤
    闵可夫斯基和
    三维凸包学习小记
    灭绝树学习小记
  • 原文地址:https://www.cnblogs.com/xiaohanghang/p/6165561.html
Copyright © 2011-2022 走看看