Yii框架防止sql注入,xss攻击与csrf攻击的方法


Posted in PHP onOctober 18, 2016

本文实例讲述了Yii框架防止sql注入,xss攻击与csrf攻击的方法。分享给大家供大家参考,具体如下:

PHP中常用到的方法有:

/* 防sql注入,xss攻击 (1)*/
function actionClean($str)
{
    $str=trim($str);
    $str=strip_tags($str);
    $str=stripslashes($str);
    $str=addslashes($str);
    $str=rawurldecode($str);
    $str=quotemeta($str);
    $str=htmlspecialchars($str);
    //去除特殊字符
    $str=preg_replace("/\/|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\+|\{|\}|\:|\<|\>|\?|\[|\]|\,|\.|\/|\;|\'|\`|\-|\=|\\\|\|/", "" , $str);
    $str=preg_replace("/\s/", "", $str);//去除空格、换行符、制表符
    return $str;
}
//防止sql注入。xss攻击(1)
public function actionFilterArr($arr)
{
    if(is_array($arr)){
      foreach($arr as $k => $v){
        $arr[$k] = $this->actionFilterWords($v);
      }
    }else{
      $arr = $this->actionFilterWords($arr);
    }
    return $arr;
}
//防止xss攻击
public function actionFilterWords($str)
{
    $farr = array(
      "/<(\\/?)(script|i?frame|style|html|body|title|link|meta|object|\\?|\\%)([^>]*?)>/isU",
      "/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU",
      "/select|insert|update|delete|drop|\'|\/\*|\*|\+|\-|\"|\.\.\/|\.\/|union|into|load_file|outfile|dump/is"
    );
    $str = preg_replace($farr,'',$str);
    return $str;
}
//防止sql注入,xss攻击(2)
public function post_check($post) {
   if(!get_magic_quotes_gpc()) {
     foreach($post as $key=>$val){
       $post[$key] = addslashes($val);
     }
    }
   foreach($post as $key=>$val){
    //把"_"过滤掉
    $post[$key] = str_replace("_", "\_", $val);
    //把"%"过滤掉
    $post[$key] = str_replace("%", "\%", $val); //sql注入
    $post[$key] = nl2br($val);
    //转换html
    $post[$key] = htmlspecialchars($val); //xss攻击
   }
   return $post;
}

调用:

//防止sql
$post=$this->post_check($_POST);
//var_dump($post);die;
$u_name=trim($post['u_name']);
$pwd=trim($post['pwd']);
if(empty($u_name)||empty($pwd))
{
  exit('字段不能非空');
}
$u_name=$this->actionFilterArr($u_name);
$pwd=$this->actionFilterArr($pwd);
//防止sql注入,xss攻击
$u_name=$this->actionClean(Yii::$app->request->post('u_name'));
$pwd=$this->actionClean(Yii::$app->request->post('pwd'));
$email=$this->actionClean(Yii::$app->request->post('email'));
//防止csrf攻击
$session=Yii::$app->session;
$csrf_token=md5(uniqid(rand(),TRUE));
$session->set('token',$csrf_token);
$session->set('token',time());
//接收数据
if($_POST)
{
  if(empty($session->get('token')) && $session->get('token')!=Yii::$app->request->post('token') && (time()-$session->get('token_time'))>30){
    exit('csrf攻击');
  }
  //防止sql
  .....

(必须放在接收数据之外)

注意:

表单提交值,为防止csrf攻击,控制器中需要加上:

//关闭csrf
piblic $enableCsrfValidation = false;

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
PHPEXCEL 使用小记
Jan 06 PHP
关于二级目录拖拽排序的实现(源码示例下载)
Apr 26 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
Jul 01 PHP
PHP SOCKET编程详解
May 22 PHP
PHP使用MPDF类生成PDF的方法
Dec 08 PHP
session 加入redis的实现代码
Jul 15 PHP
PHP flush 函数使用注意事项
Aug 26 PHP
php登录超时检测功能实例详解
Mar 21 PHP
thinkPHP5.0框架应用请求生命周期分析
Mar 25 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
Apr 17 PHP
微信公众号之主动给用户发送消息功能
Jun 22 PHP
php中array_slice和array_splice函数解析
Oct 18 #PHP
Yii框架中jquery表单验证插件用法示例
Oct 18 #PHP
Yii框架实现邮箱激活的方法【数字签名】
Oct 18 #PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
Oct 18 #PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
Oct 18 #PHP
利用PHP绘图函数实现简单验证码功能的方法
Oct 18 #PHP
Yii针对添加行的增删改查操作示例
Oct 18 #PHP
You might like
php解析url的三个示例
2014/01/20 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
php源码的使用方法讲解
2019/09/26 PHP
javascript的对话框详解与参数
2007/03/08 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
修改ligerui 默认确认按钮的方法
2016/12/27 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
js布局实现单选按钮控件
2020/01/17 Javascript
Vue.extend 登录注册模态框的实现
2020/12/29 Vue.js
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
Python中apply函数的用法实例教程
2014/07/31 Python
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
python使用PyGame模块播放声音的方法
2015/05/20 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
应届生学校辅导员求职信
2013/11/07 职场文书
管道维修工岗位职责
2013/12/27 职场文书
高中毕业生自我鉴定例文
2013/12/29 职场文书
省级四好少年事迹材料
2014/01/25 职场文书
考核评语大全
2014/04/29 职场文书
新员工试用期自我评价
2015/03/10 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
正确使用MySQL update语句
2021/05/26 MySQL
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers
Nginx配置之禁止指定IP访问
2022/05/02 Servers