Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка $_GET на наличие запрещенных символов
 
 автор: denser   (20.05.2011 в 11:23)   письмо автору
 
 

Не знаю как поступить: нужно проверить массив $_GET['tag']. В получаемом параметре. ничего кроме букв не должно быть. Стою перед выбором в использовании одного из двух способов:

Способ №1:

<?php
$tag 
preg_replace("|[^0-9a-z]|i"""$_GET['tag']);
?>


Способ №2:
<?php
$tag 
mysql_real_escape_string($_GET['tag']);
?>


Подскажите пожалуйста, что лучше использовать и как в этом случае поступают опытные программисты.

  Ответить  
 
 автор: cheops   (20.05.2011 в 12:16)   письмо автору
 
   для: denser   (20.05.2011 в 11:23)
 

Конечно, первый, второй пропустит все, только экранирует спец-символы.

  Ответить  
 
 автор: denser   (20.05.2011 в 12:56)   письмо автору
 
   для: cheops   (20.05.2011 в 12:16)
 

Скажите, а регулярное выражение верно написано?
Просто если составить такой запрос: ?tag=!@#$%^&*()text, то в массив ничего не попадает, а если спецсимволы написать в конце строки: ?tag=text!@#$%^&*(), то спецсимволы вырезаются и остается только текст.

  Ответить  
 
 автор: cheops   (20.05.2011 в 13:18)   письмо автору
 
   для: denser   (20.05.2011 в 12:56)
 

Скорее всего что-то с кодированием GET-параметров (вы используете urlencode()?), попробуйте следующий скрипт, что он выводит?
<?php 
  
echo preg_replace("|[^0-9a-z]|i""""!@#$%^&*()text"); 
?>

  Ответить  
 
 автор: denser   (20.05.2011 в 13:28)   письмо автору
 
   для: cheops   (20.05.2011 в 13:18)
 

Выводит: text

  Ответить  
 
 автор: cheops   (20.05.2011 в 14:14)   письмо автору
 
   для: denser   (20.05.2011 в 13:28)
 

У вас символ & скорее всего идет не закодированным и все что после него воспринимается как новый GET-параметр. Выведите полученное содержимое, скорее всего & и все, что после него - отрезано.

  Ответить  
 
 автор: denser   (20.05.2011 в 14:53)   письмо автору
 
   для: cheops   (20.05.2011 в 14:14)
 

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

По идее, это же штатная ситуация и можно не переживать что эти символы не попадают в запрос?
Ведь если хакер подставил эти символы в запрос, то это его проблемы. А добропорядочный пользователь не будет вручную формировать GET-параметр.

  Ответить  
 
 автор: cheops   (20.05.2011 в 19:20)   письмо автору
 
   для: denser   (20.05.2011 в 14:53)
 

Конечно.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования