在php中的MySql数据库中存储url时,我不得不使用以下内容,
mysql_real_escape_string('xyz/xyz.html')
不推荐使用mysql,现在我使用的是Yii 2.0(作者声称它是安全的).
我使用它的Gii CRUD,现在这个url很容易存储,不需要转义.
(如果它使用PDO,那么准备好的语句可能会解决上述问题)
我想知道Yii-2.0是否会处理与在数据库中存储事物然后将它们分散在视图上相关的重要安全问题.
是的,Yii2在执行SQL查询时使用PDO,但我不建议希望它可以避免所有潜在的安全问题.我通常建议2个预防规则:
当您使用URL时,我将为您的案例描述示例.它将展示很少有可能帮助您提高应用程序安全性的Yii2功能.
如果您使用CRUD创建模型和控制器,则需要对ActiveRecord::rules()方法进行少量修改(在存储url的模型中):
class SomeActiveRecord extents ActiveRecord {
// ...
public function rules(){
return [
[ ['attribute_that_store_url', 'url'] ],
];
}
}
Run Code Online (Sandbox Code Playgroud)
此代码验证将从表单加载的值.有关此验证器的更多详细信息
如果要使用DetailView显示此值(默认情况下为CRUD生成的视图),可以使用内置格式化程序:
echo DetailView::widget([
'model' => $model,
'attributes' => [
'attribute_that_store_url:url'
'title', // title attribute (in plain text)
'description:html', // description attribute in HTML
[ // the owner name of the model
'label' => 'Owner',
'value' => Html::encode($model->owner->name),
],
'created_at:datetime', // creation date formatted as datetime
],
]);
Run Code Online (Sandbox Code Playgroud)
您可以在课堂上找到的所有可用格式化程序yii\i18n\Formatter,例如URL将通过方法yii \ i18n\Formatter :: asUrl()进行预处理.在更复杂的情况下,当您想手动显示值(没有类似的小部件)时,您可以将此格式化程序作为应用程序组件来访问Yii::$app->formatter.
此外,您可以使用Html::encode更多详细信息对值进行编码:编码和解码内容
对于在显示之前预处理html可以使用HtmlPurifier,它只允许保留某些标签.
此外,阅读:安全最佳实践