я установил плагин в браузер 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.'
)
)
Я думаю, что ваши проверки имеют неправильные ключи. Это должно быть так ..
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
Спасибо..!
Добавьте ключи 'required' => true, 'allowEmpty' => false
в ваши проверочные массивы.
Проверка не удалась, потому что если вы удаляете поля из формы с помощью инструментов разработчика, таких как 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']='';
}
Если отсутствует поле, этот код добавит это поле и присвоит ему пустую строку. Тогда эти поля будут пригодны для проверки и в конечном итоге не пройдут проверку.