Yii2是否会处理重要的安全问题?

Ram*_*eek 3 yii2

在php中的MySql数据库中存储url时,我不得不使用以下内容, mysql_real_escape_string('xyz/xyz.html') 不推荐使用mysql,现在我使用的是Yii 2.0(作者声称它是安全的).

我使用它的Gii CRUD,现在这个url很容易存储,不需要转义.

(如果它使用PDO,那么准备好的语句可能会解决上述问题)

我想知道Yii-2.0是否会处理与在数据库中存储事物然后将它们分散在视图上相关的重要安全问题.

Kos*_*kis 5

是。该save()方法负责SQL注入。同样适用于QueryBuilder

对于XSS攻击,您必须先转义用户输入,然后再使用呈现Html::encode($var)或使用\yii\helpers\HtmlPurifier::process($this->$attribute)之前将其保存到数据库中。

Yii会自动处理CRSF验证。

有关更多信息,请访问:

活动记录

QueryBuilder

命令

询问

活动记录指南

安全最佳实践


ISt*_*ger 5

是的,Yii2在执行SQL查询时使用PDO,但我不建议希望它可以避免所有潜在的安全问题.我通常建议2个预防规则:

  • 保存前过滤所有用户输入字符串,
  • 在视图中显示时编码所有这些字符串.

当您使用URL时,我将为您的案例描述示例.它将展示很少有可能帮助您提高应用程序安全性的Yii2功能.

  1. 保存前过滤.

如果您使用CRUD创建模型和控制器,则需要对ActiveRecord::rules()方法进行少量修改(在存储url的模型中):

class SomeActiveRecord extents ActiveRecord {
    // ...

    public function rules(){
        return [
            [ ['attribute_that_store_url', 'url'] ],
        ];
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码验证将从表单加载的值.有关此验证器的更多详细信息

  1. 在diplaying之前编码.

如果要使用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,它只允许保留某些标签.

此外,阅读:安全最佳实践