Aby zabezpieczyć się przed ręcznym wpisaniem adresu strony (z parametrami) w przeglądarce i wykonaniem operacji niedozwolonej, parametry do akcji powinny być przekazane metodą POST.
Budowa odnośnika
<?= Html::a('Szczegóły', ['/users/view', 'id' => $model->id], ['data-method' => 'POST']); ?>
Controller
public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'rules' => [ [ 'allow' => true, 'roles' => ['super_user'], ], ], ], 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'delete' => ['post'], 'view' => ['post'], #Decyduje o sposobie przekazywania param. ], ], ]; } public function actionView($id){ }
Metoda polega na filtrowaniu (validacji) atrybutów modelu przed ich zapisaniem.
W modelu należy dodać funkcję:
public function beforeValidate() { foreach (array_keys($this->getAttributes()) as $attr) { if (!empty($this->$attr)) { $this->$attr = \yii\helpers\HtmlPurifier::process($this->$attr); } } return parent::beforeValidate(); }
HtmlPurifier to klasa, która usuwa z danych podejrzane fragmenty