我有一个基本的Yii CActiveForm,我用来收集用户的输入,然后通过默认的Yii ActiveRecord模型[/ edit]插入到数据库[edit]中。像任何人一样,我想确保一个聪明的用户不会通过其中一个字段删除我的数据库。
问题是:Yii CActiveForm在恶意做任何事情之前会自动清理输入吗?我找不到任何关于此的文件。不确定我是否需要花时间或已经处理过。
谢谢!
答案 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/