Защищен ли я от внедрения MySQL, когда использую $ this-> data? - PullRequest
1 голос
/ 02 марта 2012

Я новичок в CakePHP и безопасности. Я читал, что безопасность встроена для защиты от внедрения MySQL, если вы следуете правилам тортов, но может кто-нибудь сказать мне, будет ли безопасно мое save () без ручного вызова класса Security?

function edit($id) {
 $this->set('title', 'Edit your property');
 $this->Unit->id = $id;    
 if (empty($this->data)) {        
$this->data = $this->Unit->read();    
} else { 

    if ($this->Unit->saveAll($this->data)) {            
        $this->Session->setFlash('Your property has been updated.');            

        }   
}
}

Ответы [ 3 ]

3 голосов
/ 02 марта 2012

CakePHP процитирует данные для вас.Если вы не используете метод, подобный следующему:

$this_year = date('Y-m-d h:i:s', strtotime('-1 year'));

$this->Baker->updateAll(
    array('Baker.approved' => true),
    array('Baker.created <=' => $this_year)
);

, который принимает литералы SQL, вы в безопасности и должны не цитировать данные самостоятельно, чтобы избежать кавычек в данных.Источник: http://book.cakephp.org/2.0/en/models/saving-your-data.html

3 голосов
/ 05 марта 2012

Cake избегает данных, ЕСЛИ вы используете db-funcitons of cake (например, $ this-> modelname-> save ($ this-> data) или $ this-> find (..)), учтите, что если выиспользуйте пользовательские запросы, такие как $ this-> query ("SELECT * FROM table WHERE id = '. $ this-> data [' model '] [' id ']); торт НЕ избежит их, помните об этом!

1 голос
/ 02 марта 2012

Я скажу нет , поскольку ваш параметр нигде не специализирован или не подвергнут дезинфекции. Как то так, ограничил бы риск

function edit($id) { 
   // type cast the id to be forced into number and check if $id has greater than 1 
   if((int)$id > 0) {

   // hence the injection vulnerability at $id is fixed
   //....remaining part
   }
}
...