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

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

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

 

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

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

тема: про шаблон в rewrite mode
 
 автор: moonfox   (09.01.2008 в 18:18)   письмо автору
 
 

скажите пожалуйста
вызов
RewriteRule ^([a-z0-9]+)/?$
эдентичен ли:
$_GET[$key] = ereg_replace("[^a-z^0-9]", "", $val);

???

   
 
 автор: cheops   (10.01.2008 в 14:19)   письмо автору
 
   для: moonfox   (09.01.2008 в 18:18)
 

Нет, правила RewriteRule не изменяют значения GET-параметров - они изменяют только внешний вид URL-запроса.

   
 
 автор: moonfox   (10.01.2008 в 17:41)   письмо автору
 
   для: cheops   (10.01.2008 в 14:19)
 

как тогда быть в адресной строке я имею site.ru/basic/1/2/5

если менять эти значения то в запрос к мусклу передаються неверные значения.. а использование ereg_replace или str_replace что-то не к чему не приводит потому что в адресной строке нет переменых а их значения... как тут избежать инъекцию?

   
 
 автор: Unkind   (10.01.2008 в 22:35)   письмо автору
 
   для: moonfox   (09.01.2008 в 18:18)
 

> RewriteRule ^([a-z0-9]+)/?$
Ну и где подстановка после паттерна?

> как тут избежать инъекцию?
mod_rewrite и HTTP-сервер вообще не формирует SQL-запросы к Вашей СУБД, поэтому тут SQL Injection никаким боком. Для того, чтобы избегать подобной уязвимости, нужно научиться правильно решать вот эту задачу: http://softtime.ru/info/task.php?id_article=110

   
 
 автор: moonfox   (11.01.2008 в 08:38)   письмо автору
 
   для: Unkind   (10.01.2008 в 22:35)
 

хех...

вот я имею в хтакцессе

RewriteEngine On
RewriteBase /
RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)/?$ index.php?page=$1&lang=$2&tbl=$3&tpl=$4&sort=$5&arr=$6
RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/([0-9]+)/([0-9]+)/?$ index.php?page=$1&lang=$2&tbl=$3&tpl=$4


до этого я не использовал коротких адресов и имелл сылки типа
index.php?page=basic&lang=ru&tbl=3&tpl=4&sort=1&arr=1

естественно значения переменых получаем из гет и формируем с этими даными заппрос на выборку к MYSQL...
ранее я использовал обработку значений переменных GET

foreach ($_GET as $key => $val)

$_GET[$key] = ereg_replace("[^A-Za-z^0-9]", "", $val); 
}

сейчас в адресной строке нет имен переменных а только их значения... и ereg_replace если я не ошибаюся не обрабатывает их значений.... следовательно можно подставлять все символы в строку к переменным...

как мне сейчас оставив короткие адресса обрабавтываеть значения GET чтобы не пропускать не желательных символов..?

   
 
 автор: moonfox   (11.01.2008 в 08:55)   письмо автору
 
   для: moonfox   (11.01.2008 в 08:38)
 

не правильно воспринял походу результат работы скрипта
у меня строка
/basic/ru/1/2/1/1
обратится по имени к переменой GET можно
например значение 2 это переменная $tpl
echo $_GET['tpl']; даст 2
но если написать в строке
/basic/ru/1/2+2/1/1
то выдает Невозможно найти страницу
я так понил это mod_rewrite не может преобразовать строку....

вот так вроде
([^/.]*)
пропускает все символы и срабатывает ereg_replace

скажите стоит так делать или лучше пусть остаеться старый шаблон преобразований но переадресовывать на свою страницу с ошибкой?
как переадрисовывать?

   
 
 автор: Unkind   (11.01.2008 в 14:36)   письмо автору
 
   для: moonfox   (11.01.2008 в 08:55)
 

Лучше, конечно, позволять вбивать только цифры. Зачем давать взломщику надежду на что-то?

А сам PHP-код никак не должен меняться. То есть должна быть старая обработка, т.к. все равно можно обратиться к скрипту по старому варианту (просто передать данные через QUERY_STRING).

Кстати, можно изменить подстановку на "index.php?%{QUERY_STRING}&page=$1&lang=$2&tbl=$3&tpl=$4", чтобы можно было задавать какие-то переменные через QUERY_STRING в дальнейшем.

И ereg_replace использовать не надо. Во-первых, насколько я знаю в PHP6 POSIX-регулярные выражения исключат, во-вторых, тут не нужно регулярные выражения вообще.
Если уж вдруг Вы точно уверены, что все переменные, переданные методом GET должны быть целыми числами, то можно сделать так:

<?php
$_GET 
array_map(create_function('$a''return is_array($a) ? 0 : intval($a);'), $_GET);
?>

   
 
 автор: moonfox   (11.01.2008 в 14:55)   письмо автору
 
   для: Unkind   (11.01.2008 в 14:36)
 

если не использовать ereg_replace
как обезопасить передаваемые значения из get?
использовать mysql_escape_string ?

   
 
 автор: Unkind   (11.01.2008 в 15:02)   письмо автору
 
   для: moonfox   (11.01.2008 в 14:55)
 

>если не использовать ereg_replace
>как обезопасить передаваемые значения из get?


А я что выше написал?

> использовать mysql_escape_string ?
http://softtime.ru/info/task.php?id_article=110

   
 
 автор: moonfox   (11.01.2008 в 20:10)   письмо автору
 
   для: Unkind   (11.01.2008 в 15:02)
 

спасибо

   
Rambler's Top100
вверх

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