看到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

只要是客户端来的数据($_POST, $_GET, $_COOKIE等等)都有潜在的危险,关键在于你怎么用它们。

在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。