当前位置: 首页 > news >正文

Yii防注入攻击笔记

网站表单有注入漏洞须对所有用户输入的内容进行个过滤和检查,可以使用正则表达式或者直接输入字符判断,大部分是只允许输入字母和数字的,其它字符度不允许;对于内容复杂表单的内容,应该对html和script的符号进行转义替换:尤其是<,>,',"",&这几个符号

这里有个转义对照表:
http://blog.csdn.net/xinzhu1990/article/details/7032301

单引号替换成两个

直接将客户端传过来的的参数值直接组成字符串sql,而不是使用statment填充参数的方式,也没有进行字符串处理和过滤,这些地方都有注入的漏洞,尤其是没有对单引号过滤

php里有转义的函数可以直接调用addslashes(), stripslashes(), htmlspecialchars(), htmlentities(), nl2br() 等函数.

addslashes(), stripslashes() 一般是入数据库和出库的时候使用,以免变量中存储类似引号这些关键词

htmlspecialchars() 函数只用来转义少量HTML, &,双引号,大于号和小于号.并不会全部转换成 HTML 所定的 ASCII 转换

htmlentities()这个是全部转换html实体,和htmlspecialchars()区别在于,这个函数是转义全部的字符,而htmlspecialchars()仅仅转义上面限定的5个特殊字符!

htmlspecialchars() 转义特别的字符为HTML实体;

 

   '&' (ampersand) becomes '&amp;'

   '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.

   ''' (single quote) becomes '&#039;' only when ENT_QUOTES is set.

   '<' (less than) becomes '&lt;'

   '>' (greater than) becomes '&gt;'

当显示文本时,调用 CHtml::encode() 对其中的HTML编码。这可以防止XSS注入.

使用cookies时使用Yii内置的cookies组件来进行cookie操作,不要使用$_COOKIES。

这样可以防止cookie攻击

$cookie=Yii::app()->request->cookies[$name];

$value=$cookie->value;

Yii::app()->request->cookies[$name]=$cookie;

对于是知道类型的post,get参数,得先转换类型,尤其是知道是整型的

防范XSS攻击的最重要的措施之一就是:在显示用户输入的内容之前进行内容检查。

Yii提供了一个很有用的组件CHtmlPurifier可以将通过有效的审查、安全和白名单功能来把所审核的内容中的所有的恶意代码清除掉,并且确保过滤之后的内容过滤符合标准。

CHtmlPurifier组件可以作为一个widget或者filter来使用。 当作为一个widget来使用的时候,CHtmlPurifier可以对在视图中显示的内容进行安全过滤。

<?php $this->beginWidget('CHtmlPurifier'); ?>

//...这里显示用户输入的内容...

<?php $this->endWidget(); ?>

跨站请求伪造(简称CSRF)攻击,即攻击者在用户浏览器在访问恶意网站的时候,让用户的浏览器向一个受信任的网站发起攻击者指定的请求。 Yii实现了一个CSRF防范机制,用来帮助防范基于POST的攻击。默认情况下,CSRF防范是禁用的。如果你要启用它,可以编辑应用配置 中的组件中的CHttpRequest部分。

return array(

   'components'=>array(

       'request'=>array(

           'enableCsrfValidation'=>true,

       ),

   ),

);

要显示一个表单,请使用CHtml::form而不要自己写HTML代码。

Yii实现了一个cookie验证机制,可以防止cookie被修改。启用之后可以对cookie的值进行HMAC检查。

return array(

   'components'=>array(

       'request'=>array(

           'enableCookieValidation'=>true,

       ),

   ),

);

直接使用AR对象赋值操作数据库的Yii会自动做防注入处理。

不使用AR对象赋值方式,使用直接sql的,也应该使用这种参数赋值的方式,可以防止注入攻击:

$db = Yii::app()->db;

$sql = "select * from table where userid=:userid and date between :date_start and :date_end"

$results = $db->createCommand($sql)->query(array(

 ':userid' => 115,':date_start'=>'2009-12-1',':date_end'=>'2009-12-31',

));

...

 

本文出自 “小何贝贝的技术空间” 博客,请务必保留此出处http://babyhe.blog.51cto.com/1104064/1250000

转载于:https://www.cnblogs.com/imxiu/p/3530476.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 设为首页 和 收藏本站js代码 兼容IE,chrome,ff
  • sublime 个性化设置
  • php示例代码之读取文件
  • zabbix 判断 主机是否存活
  • vsftpd-Note
  • 微软RPC官方教程
  • 如何配置和使用Tomcat访问日志
  • 排列木桩
  • mysql 主从同步event问题
  • Angularjs之国际化
  • php面试相关
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • java经典面试题!
  • Bootstrap模态框的简单示例
  • 解决Could not commit JPA transaction RollbackException: Transaction marked as rollbackOnly
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【Amaple教程】5. 插件
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Asm.js的简单介绍
  • ES6 ...操作符
  • Git初体验
  • input实现文字超出省略号功能
  • Mysql优化
  • Next.js之基础概念(二)
  • React 快速上手 - 07 前端路由 react-router
  • SpiderData 2019年2月13日 DApp数据排行榜
  • SpringBoot 实战 (三) | 配置文件详解
  • vue中实现单选
  • 半理解系列--Promise的进化史
  • 产品三维模型在线预览
  • 解析 Webpack中import、require、按需加载的执行过程
  • -- 数据结构 顺序表 --Java
  • 数据结构java版之冒泡排序及优化
  • 微信开源mars源码分析1—上层samples分析
  • 译米田引理
  • 06-01 点餐小程序前台界面搭建
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 数据库巡检项
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​数据结构之初始二叉树(3)
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (1)Android开发优化---------UI优化
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (四)js前端开发中设计模式之工厂方法模式
  • (四)linux文件内容查看
  • .htaccess配置重写url引擎
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .sdf和.msp文件读取