Проверка ввода пользователя или - PullRequest
6 голосов
/ 12 апреля 2010

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

Например, если пользователь отправляет:

��������� lcd SONY

(Обратите внимание на?) Мне нужно отменить поиск.

Я включил версию вышеуказанной строки в кодировке base64, чтобы ее можно было легко запустить:

print(base64_decode("1MfLxc/RwdPHIGxjZCBTT05Z"));

Я игнорировал такие входные данные раньше, но теперь (не уверен почему) только что понял, что запрос к базе данных mysql выполняется почти вечно, поэтому теперь он имеет высокий приоритет.

Другой пример, который подчеркивает, что мы используем utf-8 и mb_detect_encoding, мало помогает:

print(base64_decode("zqDOm8+Fzr3PhM63z4HOuc6/IM+Bzr/Phc+HzyU="));
ΠΛυντηριο ρουχ�%

Итак:

  • как я могу обнаружить / отфильтровать эти входы?
  • как генерируется этот ввод?

Ответы [ 2 ]

1 голос
/ 12 апреля 2010

Вы не должны получать это, хотя, если вы действительно хотите фильтровать (что я не рекомендую), выполните проверку буквенно-цифровых символов, а также "- .;" и т. Д.

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

http://www.php.net/manual/en/function.ctype-alnum.php

0 голосов
/ 12 апреля 2010

Если вы выполняете эти запросы после создания соединения с mysql, он должен обрабатывать ввод utf-8 и результаты просто отлично, не выплескивая?

mysql_query("SET character_set_client=utf8", $mysqlConn);
mysql_query("SET character_set_connection=utf8", $mysqlConn);
mysql_query("SET character_set_results=utf8", $mysqlConn);

(при условии, что база данных настроена на utf-8, и вы не против не фильтровать их, если они не превращаются в?)

(также предполагается, что вы используете mysql, другие dbms, вероятно, имеют аналогичные функции)

...