Yii CActiveForm会自动清理用户输入吗?

时间:2011-10-06 16:59:46

标签: database yii sanitization insert-update

我有一个基本的Yii CActiveForm,我用来收集用户的输入,然后通过默认的Yii ActiveRecord模型[/ edit]插入到数据库[edit]中。像任何人一样,我想确保一个聪明的用户不会通过其中一个字段删除我的数据库。

问题是:Yii CActiveForm在恶意做任何事情之前会自动清理输入吗?我找不到任何关于此的文件。不确定我是否需要花时间或已经处理过。

谢谢!

3 个答案:

答案 0 :(得分:6)

当您说“CActiveForm”时,我认为您的意思是使用Yii生成的模型和控制器。 CActiveForm不会自动为您执行任何清理,但如果您使用Yii默认使用的ActiveRecord方法,它通常会根据每个字段的数据类型为您执行PDO绑定。如果您使用createCommand()或其他方法创建自己的查询,则应define your own bindings

如果你想看看发生了什么,你可以turn on logging,例如,使用db命令生成一个文件,将它添加到components-> log array中的配置文件中:

'components'=>array(
 'log'=>array(
  'class'=>'CLogRouter',
    'routes'=>array(    
      array(
        'class'=>'CFileLogRoute',
        'levels'=>'trace, info',
        'categories'=>'system.db.*',
        'logFile'=>'db.log',
      ),
     ...

如果您看到参数化了更新语句,您可以非常确定它们正在使用PDO bindings,这将阻止大多数(但不一定是所有)SQL攻击。 (默认情况下,日志文件保存在“运行时”目录中,然后您可以跟踪该目录。您也可以使用CWebLogRoute将其显示在网页底部或FireBug中,但不会显示如果页面被重定向,则为所有命令。)

答案 1 :(得分:3)

CActiveForm不会自动对用户输入进行任何卫生处理。也就是说,有些是关于Yii安全的更多细节:

跨站点脚本安全性(XSS):

关于它的安全功能的Yii指南帖子:

http://www.yiiframework.com/doc/guide/1.1/en/topics.security

总结上面的链接,您可以非常轻松地启用CHtmlPurifier过滤器,以便在您的操作触发之前清理用户输入,但它不是默认行为

Yii还有一些功能,您可以打开以验证Cookie并防止跨网站请求伪造,也在链接中提到。

数据库安全:

至于您对丢弃数据库的用户输入的关注,如果您使用Yii的标准数据访问对象(如CActiveRecord)和MySql,用于保存数据的PDO bindings应该可以防止针对一阶SQL注入攻击。

答案 2 :(得分:0)

Yii不提供输入清理功能。 CHtmlPurifier组件用于清理要显示给最终用户的数据。

如果要清理输入,可以直接使用PHP filter_input()函数(http://us3.php.net/m...ilter-input.php)。

我从以下链接获取这些answare

http://www.yiiframework.com/forum/index.php/topic/1041-how-to-sanitize-post/