Проверка CakePHP терпит неудачу на инъекции SQL

я установил плагин в браузер Firefox, который называется «SQL Inject Me», а затем попробовал его на своем сайте Cakephp. Я вижу, что он смог ввести несколько пустых учетных записей (некоторые с паролем), а некоторые без пароля. База данных не может принимать нулевые значения для имени пользователя, адресов электронной почты и т. Д. Также я не уверен, как она может обойти проверку CakePHP.

моя проверка CakePHP для поля имени пользователя

        'username' => array(
'username must not be empty' => array(
'rule' => 'notEmpty',
'message' => 'username field cannot be empty'
),'username must be unique' => array(
'rule' => 'isUnique',
'message' => 'username is already taken'

)
'username must not contain special character' => array(
'rule' => 'usernameValidation',
'message' => 'username can only contain numbers, characters, underscores, dashes and Periods. Underscore, dash and Period are only allowed in the middle.'
)
)

0

Решение

Я думаю, что ваши проверки имеют неправильные ключи. Это должно быть так ..

var $validate = array(
'username' => array(
'notEmpty' => array(
'rule' => 'notEmpty',
'message' => 'username field cannot be empty'
),'isUnique' => array(
'rule' => 'isUnique',
'message' => 'username is already taken'

)
'usernameValidation' => array(
'rule' => 'usernameValidation',
'message' => 'username can only contain numbers, characters, underscores, dashes and Periods. Underscore, dash and Period are only allowed in the middle.'
)
)
)

и при сохранении их вам просто нужно вызвать функцию проверки, чтобы пройти правила проверки. Ниже ссылка может помочь вам, как проверить с контроллера при сохранении данных.

http://book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.html

Спасибо..!

0

Другие решения

Добавьте ключи 'required' => true, 'allowEmpty' => false в ваши проверочные массивы.

0

Проверка не удалась, потому что если вы удаляете поля из формы с помощью инструментов разработчика, таких как firebug, то проверки для CakePHP не будут работать для этих удаленных полей.

что я сделал, чтобы исправить эти проблемы, это использовать этот код прямо перед передачей данных для сохранения метода.

            if(!(isset($this->request->data['User']['email']))){
$this->request->data['User']['email']='';
}
if(!(isset($this->request->data['User']['username']))){
$this->request->data['User']['username']='';
}
if(!(isset($this->request->data['User']['password']))){
$this->request->data['User']['password']='';
}
if(!(isset($this->request->data['User']['confirm_password']))){
$this->request->data['User']['confirm_password']='';
}

Если отсутствует поле, этот код добавит это поле и присвоит ему пустую строку. Тогда эти поля будут пригодны для проверки и в конечном итоге не пройдут проверку.

0