Проблема с проверкой

  • Автор темы trojan.WinLock
  • 34
  • Обновлено
  • 18, May 2024
  • #1
У меня есть работающий сайт с проблемами проверки.

Кто-то из моих знакомых пытается создать учетную запись пользователя, но выдает ошибку «неправильный формат имени». Я только что удалил ошибочную обработку специальных символов проверки поля города и выдачу той же ошибки, что и имя, но не уверен, что это единственная ошибка.
 function spec_comma($val, $key)

{

$illegal = "`!@#$%^&*()-_=+[]{};'\:\"|./<>?";

if(strpbrk($val, $illegal))

{

array_push($this->errors, ucfirst($key) . ' incorrect format');

}

}
Код (разметка): это единственные функции, которые выдают неправильный формат.

Электронная почта
 function spec_username($val, $key) { $illegal = "`!@#$%^&*()=+[]{};'\:\"|,./<>?"; if(strpbrk($val, $illegal)) { array_push($this->errors, ucfirst($key) . ' incorrect format'); } }
Код (разметка):
 function validate_email($val, $key) { if(!filter_var($val, FILTER_VALIDATE_EMAIL)) { array_push($this->errors, ucfirst($key) . ' incorrect format'); } }
Код (разметка):
 $validator = new Validator; foreach($_POST as $key => $val) { $_POST[$key] = trim($_POST[$key]); } $validator->validate_alpha($_POST['firstName'], 'first name'); $validator->validate_alpha($_POST['lastName'], 'last name'); $validator->validate_length($_POST['firstName'], 1, 28, 'first name'); $validator->validate_length($_POST['lastName'], 1, 28, 'last name'); $validator->validate_length($_POST['city'], 1, 28, 'city'); $validator->validate_length($_POST['username'], 4, 16, 'username'); $validator->validate_length($_POST['password'], 4, 16, 'password'); $validator->validate_length($_POST['securityAnswer'], 1, 246, 'securty answer'); $validator->validate_email($_POST['email'], 'email'); $validator->spec($_POST['firstName'], 'first name'); $validator->spec($_POST['lastName'], 'last name'); $validator->spec_username($_POST['username'], 'username'); $validator->spec($_POST['password'], 4, 16, 'password'); $errors = $validator->return_errors();
Код (разметка):

trojan.WinLock


Рег
06 Oct, 2015

Тем
2

Постов
3

Баллов
23
  • 29, May 2024
  • #2
Помните, что filter_var в электронной почте проверяет только пространство символов, но НЕТ для допустимых длин.

Вот, попробуй мой.
 

function isValidEmail($address) {

if (filter_var($address,FILTER_VALIDATE_EMAIL) == FALSE) return false;

/* explode out local and domain */

list($local, $domain) = explode('@', $address);

$localLength = strlen($local);

$domainLength = strlen($domain);

return (

/* check for proper lengths */

($localLength > 0 && $localLength < 65) &&

($domainLength > 3 && $domainLength < 256) &&

(

checkdnsrr($domain, 'MX') ||

checkdnsrr($domain, 'A')

)

);

}

Код (разметка): проверяется не только допустимость символов и их длина, но и наличие в домене записи MX или A. Эта последняя проверка может добавить немного накладных расходов, но, ИМХО, ее стоит сделать просто для того, чтобы люди не могли вводить какой-то выдуманный сказочный домен.
 

DariaVe


Рег
01 Jan, 2011

Тем
0

Постов
2

Баллов
2
  • 03, Jun 2024
  • #3
Это выглядит как эта функция: spec_username выдает ошибку. Если в имени есть какой-либо из этих символов, это приведет к ошибке: `!@#$%^ & *()=+[]{};'\:\"|,./<>? \ являются побегами, поэтому они не учитываются. Это включает в себя ', который вполне может быть виновником.
 

yisay


Рег
07 Nov, 2014

Тем
1

Постов
2

Баллов
12
Тем
49554
Комментарии
57426
Опыт
552966

Интересно