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之第五天
Oct 09 PHP
如何实现给定日期的若干天以后的日期
Oct 09 PHP
Mysql和网页显示乱码解决方法集锦
Mar 27 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
PHP中ini_set和ini_get函数的用法小结
Feb 18 PHP
php分页代码学习示例分享
Feb 20 PHP
一漂亮的PHP图片验证码实例
Mar 21 PHP
Laravel模型间关系设置分表的方法示例
Apr 21 PHP
PHP设计模式之工厂方法设计模式实例分析
Apr 25 PHP
php实现微信企业转账功能
Oct 02 PHP
PHP示例演示发送邮件给某个邮箱
Apr 03 PHP
laravel 自定义常量的两种方案
Oct 14 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之第五天
2006/10/09 PHP
PHP超牛逼无限极分类生成树方法
2015/05/11 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
php中yii框架实例用法
2020/12/22 PHP
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
别了 JavaScript中的isXX系列
2012/08/01 Javascript
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
vscode vue 文件模板的配置方法
2019/07/23 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
Python中使用asyncio 封装文件读写
2016/09/11 Python
python rsa 加密解密
2017/03/20 Python
Python 操作文件的基本方法总结
2017/08/10 Python
Python实现简易版的Web服务器(推荐)
2018/01/29 Python
Python实现线程状态监测简单示例
2018/03/28 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
Python 找出出现次数超过数组长度一半的元素实例
2020/05/11 Python
python实现人像动漫化的示例代码
2020/05/17 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
迟到检讨书400字
2014/01/13 职场文书
学习党代会心得体会
2014/09/05 职场文书
健康状况证明模板
2014/10/23 职场文书
人事文员岗位职责
2015/02/04 职场文书
致运动员的广播稿
2015/08/19 职场文书