|
|
|
| Не знаю как поступить: нужно проверить массив $_GET['tag']. В получаемом параметре. ничего кроме букв не должно быть. Стою перед выбором в использовании одного из двух способов:
Способ №1:
<?php
$tag = preg_replace("|[^0-9a-z]|i", "", $_GET['tag']);
?>
|
Способ №2:
<?php
$tag = mysql_real_escape_string($_GET['tag']);
?>
|
Подскажите пожалуйста, что лучше использовать и как в этом случае поступают опытные программисты. | |
|
|
|
|
|
|
|
для: denser
(20.05.2011 в 11:23)
| | Конечно, первый, второй пропустит все, только экранирует спец-символы. | |
|
|
|
|
|
|
|
для: cheops
(20.05.2011 в 12:16)
| | Скажите, а регулярное выражение верно написано?
Просто если составить такой запрос: ?tag=!@#$%^&*()text, то в массив ничего не попадает, а если спецсимволы написать в конце строки: ?tag=text!@#$%^&*(), то спецсимволы вырезаются и остается только текст. | |
|
|
|
|
|
|
|
для: denser
(20.05.2011 в 12:56)
| | Скорее всего что-то с кодированием GET-параметров (вы используете urlencode()?), попробуйте следующий скрипт, что он выводит?
<?php
echo preg_replace("|[^0-9a-z]|i", "", "!@#$%^&*()text");
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(20.05.2011 в 13:18)
| | Выводит: text | |
|
|
|
|
|
|
|
для: denser
(20.05.2011 в 13:28)
| | У вас символ & скорее всего идет не закодированным и все что после него воспринимается как новый GET-параметр. Выведите полученное содержимое, скорее всего & и все, что после него - отрезано. | |
|
|
|
|
|
|
|
для: cheops
(20.05.2011 в 14:14)
| | Немного поэксперементировав, выяснил что если поставить перед текстом один из этих символов #&, то строка получается пустой.
По идее, это же штатная ситуация и можно не переживать что эти символы не попадают в запрос?
Ведь если хакер подставил эти символы в запрос, то это его проблемы. А добропорядочный пользователь не будет вручную формировать GET-параметр. | |
|
|
|
|
|
|
|
для: denser
(20.05.2011 в 14:53)
| | Конечно. | |
|
|
|