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下使用以下代码连接并测试
Apr 09 PHP
php面向对象全攻略 (一) 面向对象基础知识
Sep 30 PHP
PHP输出时间差函数代码
Jan 28 PHP
php自定义的格式化时间示例代码
Dec 05 PHP
PHP数组相关函数汇总
Mar 24 PHP
php调整服务器时间的方法
Apr 03 PHP
php获取json数据所有的节点路径
May 17 PHP
Linux操作系统安装LAMP环境
Jun 26 PHP
PHP中FTP相关函数小结
Jul 15 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
PHP生成图片缩略图类示例
Jan 12 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 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生成静态页的实现方法
2013/05/10 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
zen cart实现订单中增加paypal中预留电话的方法
2016/07/12 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
2019/08/03 PHP
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
JS实现重新加载当前页面
2016/11/29 Javascript
js 颜色选择插件
2017/01/23 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
vue:el-input输入时限制输入的类型操作
2020/08/05 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
ptyhon实现sitemap生成示例
2014/03/30 Python
Python使用multiprocessing创建进程的方法
2015/06/04 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
浅谈matplotlib.pyplot与axes的关系
2020/03/06 Python
Python中格式化字符串的四种实现
2020/05/26 Python
实习老师个人总结的自我评价
2013/09/28 职场文书
餐饮总经理岗位职责
2014/03/07 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
2014年秋季新学期寄语
2014/08/02 职场文书
2014年高校辅导员工作总结
2014/12/09 职场文书
监考失职检讨书
2015/01/26 职场文书
设备技术员岗位职责
2015/04/11 职场文书
《角的度量》教学反思
2016/02/18 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
python 制作一个gui界面的翻译工具
2021/05/14 Python
python单向链表实例详解
2022/05/25 Python
Mysql中@和@@符号的详细使用指南
2022/06/05 MySQL