CSRF跨站点请求伪造漏洞问题

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

好了废话很少说下面是今天的解决方案。php框架

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

若是不设置表单令牌,很容易致使CSRF(跨站请求伪造)、跨站提交表单。ui

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

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

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

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

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

而后你就能够在你的全部表单页面看到code

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

若是你只想在部分页面的表单加入表单令牌你能够:blog

C(‘TOKEN_ON’,false);

$this->display();

 

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

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

上面的$Data是model

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

相关文章
相关标签/搜索