再问个比较 傻的问题。。看到YII里面直接$_POST 这样安全吗? 有没有过滤。。不会过滤要自己写吧
再问个比较 傻的问题。。看到YII里面直接$_POST 这样安全吗? 有没有过滤。。不会过滤要自己写吧
自己先顶一下
只要是客户端来的数据($_POST, $_GET, $_COOKIE等等)都有潜在的危险,关键在于你怎么用它们。
在Yii里,$_POST主要用在下面的语句:
$model->attributes=$_POST;
if($model->validate()) $model->save();
看着很简单,实际上内部做很多工作,包括对$_POST变量名的过滤(根据safeAttributes),对变量值的验证(rules),以及在存入数据库时的escaping(通过binding)。所以从输入角度看,这是很安全的,甚至比统一对$_POST作过滤更安全。
输入完后就是输出。Yii提供CHtml::encode和CHtmlPurifier。
好的。。谢谢safeAttributes这个看到了,非常感谢。。。
也就是说,YII没有作全局post和get的过滤?
是没做。如果需要的话,可以在CHttpRequest::normalizeRequest()里做。总的来说,我并不建议这样做,因为全局过滤往往可能把有些好的数据给过滤掉了,而且全局过滤本身并没解决安全问题。
Quote
在Yii里,$_POST主要用在下面的语句:
$model->attributes=$_POST;
if($model->validate()) $model->save();
看着很简单,实际上内部做很多工作,包括对$_POST变量名的过滤(根据safeAttributes),对变量值的验证(rules),以及在存入数据库时的escaping(通过binding)。所以从输入角度看,这是很安全的,甚至比统一对$_POST作过滤更安全。
输入完后就是输出。Yii提供CHtml::encode和CHtmlPurifier。
如果Model扩展自CActiveRecord,那么可以用safeAttributes;
但是如果我的Model不是扩展自CActiveRecord,而是手写SQL语的话,怎么把Post数据存入数据库才安全呢?
多谢。
你可以用CFormModel。