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 分页类(模仿google)-面试题目解答
Sep 13 PHP
ThinkPHP 表单自动验证运用示例
Oct 13 PHP
yii添删改查实例
Nov 16 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
PHP连接MSSQL方法汇总
Feb 05 PHP
Zend Framework动作助手Json用法实例分析
Mar 05 PHP
Yii实现显示静态页的方法
Apr 25 PHP
yii2分页之实现跳转到具体某页的实例代码
Jun 02 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
Feb 04 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 PHP
PHP+redis实现微博的拉模型案例详解
Jul 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
打造计数器DIY三步曲(中)
2006/10/09 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
2014/03/18 NodeJs
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
Javascript玩转继承(一)
2014/05/08 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
2019/04/22 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
vue二选一tab栏切换新做法实现
2021/01/19 Vue.js
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
Python生成器以及应用实例解析
2018/02/08 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
基于PyTorch中view的用法说明
2021/03/03 Python
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
我的网上商城创业计划书
2013/12/26 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
mysql 生成连续日期及变量赋值
2022/03/20 MySQL
mysqldump进行数据备份详解
2022/07/15 MySQL