ugrás a tartalomhoz

Archívum - Május 14, 2014

Website Deployment: Let Us Count The Ways!

inf · 2014. Május. 14. (Sze), 21.38
Összefoglaló néhány webes deploy eszközről
 

Validációs tervezési hibák

inf · 2014. Május. 14. (Sze), 02.03
Szép napot!

Kíváncsi vagyok, hogy mit gondoltok a php validációról. Jó, ténylegesen nincs ilyesmi, de én nagyon furcsának találtam az alapvető hozzáállást a validáláshoz az összes kódban, amit eddig láttam. Gyakorlatilag már a kiindulásnál elbuknak, mert eleve rossz stratégiát választanak.

Alapból valahogy így szokás nekifutni php-ben a validálásnak:
  1. // lib/form/ContactForm.class.php  
  2. class ContactForm extends sfForm  
  3. {  
  4.   protected static $subjects = array('Subject A''Subject B''Subject C');  
  5.    
  6.   public function configure()  
  7.   {  
  8.     $this->setWidgets(array(  
  9.       'name'    => new sfWidgetFormInput(),  
  10.       'email'   => new sfWidgetFormInput(),  
  11.       'subject' => new sfWidgetFormSelect(array('choices' => self::$subjects)),  
  12.       'message' => new sfWidgetFormTextarea(),  
  13.     ));  
  14.     $this->widgetSchema->setNameFormat('contact[%s]');  
  15.    
  16.     $this->setValidators(array(  
  17.       'name'    => new sfValidatorString(array('required' => false)),  
  18.       'email'   => new sfValidatorEmail(),  
  19.       'subject' => new sfValidatorChoice(array('choices' => array_keys(self::$subjects))),  
  20.       'message' => new sfValidatorString(array('min_length' => 4)),  
  21.     ));  
  22.   }  
  23. }  
Symfony dokumentációból másolt kód - Form-Validation

Ez még a szerencsésebb eset. A szerencsétlenebb az, amikor külön controller-ben van a validáció és külön view-ban az űrlap létrehozása, és lapozgatni kell egyikről a másikra, hogy lássuk mi micsoda.

Miért rossz ez (legalábbis szerintem)?

Ha security-ről van szó általában mindenki a whitelist-es megoldásokat biztonságosabbnak tartja, mint a blacklist-eseket, mert könnyű kifelejteni, embereket, akiknek tiltani akarjuk az alkalmazás használatát.