yii如何框架防止SQL注入

jerry Yii 2015年08月09日 收藏

我们在开发的时候会对用户的输入做特殊字符过滤,一般的做法就是检测一下magic_quotes_gpc选项,如果为off,就需要调用addslashes对特殊字符进行转义,然后再构建sql语句:

<?php
//若magic_quotes_gpc=off,则get_magic_quotes_gpc返回false,此时就需要手动转义
if(!get_magic_quotes_gpc()) {
$xxx = addslashes($_POST['xxx']);
}
?>

经过上述处理后,我们就能安全地构建sql语句。

yii框架怎么防止sql 注入的呢?
yii框架其实已经自动帮我们做了很多事情,包括上述所讲的过滤特殊字符,前提是要用对接口,比如我有一个搜索需求(如本博客的搜索功能),刚开始的时候,我是这么做的:

<?php
 $criteria = new CDbCriteria();
 $criteria->addCondition("title like '%".$_GET['s']."%'");//很明显有sql injection
?>

有经验的开发者一看就知道有bug,那么使用yii框架该如何避免此类问题呢?原则:不要直接写sql,一切交由yiiframework处理。
如果我们换一个criteria接口:

<?php
 $criteria = new CDbCriteria();
 $criteria->addSearchCondition('title', $_GET[''s]);
?>

不直接写sql,调用addSearchCondition接口,yii会自动帮我们过滤特殊字符,搞定!