Mam około roku doświadczenia z YII, wcześniej radziłem sobie sam, natomiast teraz tworzę serwis ogłoszeniowy, to mój najbardziej zaawansowany projekt i bardzo mi zależy na jego bezpieczeństwie. Otóż, problem polega na tym:
w formularzu do wyboru mam pola select/option
value stanowią stringi
potencjalny user może sobie edytować value i wprowadzić wymyślone słowo, po czym wysłać je do bazy danych
chciałbym wprowadzić walidację po próbie przesłania
mechanika ma polegać na tym, że value jest porównywane z listą dopuszczalnych stringów
Myślałem na umieszczeniu w Rules() coś takiego, jak whitelist, jednak wywala mi errory, więc przekombinowałem.
//dodatkowe pole do zbierania string z form
$pole
rules(){
return array(
...
array('pole', 'walidacjaPola'),
)
}
model funkcja do walidacji
public function walidacjaPola(){
$wynik = DopuszczalneWartosci::model()->find('wartosc=:wartosc', array(':wartosc'=>$this->pole))
if(!isset($wynik)){
$this->pole_id=null;
$this->addError('pole', 'Pole zawiera niepoprawną nazwę');
}else{
//uzupełnienie modelu, w tym przypadku jest to id
$this->pole_id = $wynik->id;
}
}