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

Форум PHP

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

 

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

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

тема: Проверьте фильтрацию данных, плиззз
 
 автор: Infocean   (04.09.2008 в 12:55)   письмо автору
 
 

Здравствуйте!
Хотел посоветоваться с профессионалами,насчёт фильтрации данных.
Написал движок для себя и вот что-то засомневался в правильности фильтрации данных(защиты от хакерских аттак).
Хотелось бы услышать мнение профессионалов о конкретно моей ситуации.
Например:

Вводим URL ВИДА:

http://mysite.ru/index.php?category=news

//получаем данные,посланные методом GET
$category=$_GET['category'];

// заменяем все специальные символы эквивалентом
$category = htmlspecialchars ($category);

// отрезаем все ненужные симовлы
$category = preg_replace("/[^a-z]/i", "", $category);

//конектимся к таблице категорий
    mysql_query("SET NAMES 'cp1251'");
$auth = mysql_query("SELECT * FROM `category` WHERE `name_cat`='".$category."'");


Заранее благодарен за советы и замечания!

  Ответить  
 
 автор: sim5   (04.09.2008 в 13:26)   письмо автору
 
   для: Infocean   (04.09.2008 в 12:55)
 

http://mysite.ru/index.php?category=1
<?
$auth 
mysql_query("SELECT * FROM `category` WHERE `cat_id`='".intval($_GET['category'])."'");

Уж лучше по id записей это делать и не морочить голову.)

  Ответить  
 
 автор: Infocean   (04.09.2008 в 18:15)   письмо автору
 
   для: sim5   (04.09.2008 в 13:26)
 

Но тогда я не смогу замутить чистый ЧПУ.
Мне надо узнать правильно ли я фильтрую входящие данные?

  Ответить  
 
 автор: sim5   (04.09.2008 в 18:23)   письмо автору
 
   для: Infocean   (04.09.2008 в 18:15)
 

Почему это не сможете "замутить"? В раздел Апач загляните, там мутят и не такое ;-)

  Ответить  
 
 автор: Infocean   (04.09.2008 в 18:25)   письмо автору
 
   для: sim5   (04.09.2008 в 18:23)
 

Если мутить,то адрес должен будит обязательно содержать id,а значит url будит выглядеть:
http://mysite.ru/1-news.html

  Ответить  
 
 автор: sim5   (04.09.2008 в 18:51)   письмо автору
 
   для: Infocean   (04.09.2008 в 18:25)
 

Вы лучше зайдите в рекомендованный раздел и посмотрите примеры "замутения", их там предостаточно. А зпросы к базе, лучше по ID записям, это точно.

  Ответить  
 
 автор: Infocean   (04.09.2008 в 19:34)   письмо автору
 
   для: sim5   (04.09.2008 в 18:51)
 

Послушайте!!!
Я вам, конечно, благодарен, за советы использовать ID, но я итак знаю, что лучше использовать ID.
И в данный момент мне нужно чтобы использовались именно названия категорий.

Тема создавалась не для того чтобы вы мне советовали в какой раздел пройти, а для того чтобы мне посоветовали правильную проверку!!!

Мне нужно без всякого гемора сейчас всё сделать и уже завтра запустить движок!!!
Если мне надо будит изменить выдачу с имён категорий на их айдэ, то я всё сделаю сам.

  Ответить  
 
 автор: Trianon   (04.09.2008 в 20:05)   письмо автору
 
   для: Infocean   (04.09.2008 в 19:34)
 

Вы бы хотя б написали, из каких символов может это имя состоять....

  Ответить  
 
 автор: Infocean   (04.09.2008 в 21:51)   письмо автору
 
   для: Trianon   (04.09.2008 в 20:05)
 

Я вас(Trianon) помню, вы мне с запросом помогали, за что огромное вам спасибо, но пришлось всё-таки использовать два отдельных запроса, т.к. Smarty отказывался выводить половину данных поступивших из базы!!!

А что разве из этого не видно какие символы нужны???:

// отрезаем все ненужные симовлы
$category = preg_replace("/[^a-z]/i", "", $category);

Входящие данные, только маленькие английские буквы.
А также я делаю проверку на существование категории в БД и если категории нет,то вывожу ошибку!

Вообщем, в принципе написанный движок можно посмотреть на этом сайте(_dpk8.ru-это мой тестовый домен), но вопрос о правильной фильтрации данных ещё открыт!!!

Если вдруг зайдя на сайт, вы обнаружите там уязимость, то прошу не Дефейсить сайт и не трогать ни чего на хосте, лучше сообщите здесь об этом и я постараюсь исправить допущенные ошибки!!!

Двигло ещё сырое и сейчас находится на стадии тестирования!!!

Заранее благодарен за советы и помощь!!

  Ответить  
 
 автор: Trianon   (04.09.2008 в 22:17)   письмо автору
 
   для: Infocean   (04.09.2008 в 21:51)
 

>Входящие данные, только маленькие английские буквы.

>А что разве из этого не видно какие символы нужны???:
Там написано другое.

Тогда не нужно ничего резать.
выполняем проверку:
$category = $_GET['category'];
if(!pregh_match('/^[a-z]+$/', $category)) exit("Illegal input");
$res = mysql_query("SELECT * FROM `category` WHERE `name_cat`='$category'");
//...

  Ответить  
 
 автор: infocean   (05.09.2008 в 00:15)   письмо автору
 
   для: Trianon   (04.09.2008 в 22:17)
 

Объясните,пожалуйста.
Почему не годится моя фильтрация?
Ведь все не нужные символы обрезаются и в БД поступают чистые английские буквы.

  Ответить  
 
 автор: Trianon   (05.09.2008 в 00:20)   письмо автору
 
   для: infocean   (05.09.2008 в 00:15)
 

Вам введенное имя нужно передать или отдельные буквы?

  Ответить  
 
 автор: Infocean   (05.09.2008 в 00:32)   письмо автору
 
   для: Trianon   (05.09.2008 в 00:20)
 

Передать нужно целое имя категории!
После получения данных GET,я фильтрую их(т.е. обрезаю и остовляю только английские буквы) и ставлю в запрос к БД,далее идёт проверка данных полученных из запроса и в зависимоти от результата выводится или ошибка или данные.

p.s. прошу прощения за возможные помарки в тексте,пишу с КПК.

  Ответить  
 
 автор: serjinio   (05.09.2008 в 01:08)   письмо автору
 
   для: Infocean   (04.09.2008 в 12:55)
 

Имеем ссылку
http://mysite.ru/index.php?category=news

переделываем ее в...
http://mysite.ru/news/

пишем в .htaccess
RewriteRule ^([A-Za-z]+)/?$ index.php?category = $1 [L]

или если
http://mysite.ru/news1/

RewriteRule ^([a-zA-Z0-9]+)/?$ index.php?category = $1 [L]


получаем переменную
$c_id = htmlspecialchars($_GET['category']);

в БД создаем поле с_url --->(news)
делаем выборку из бд
$rs=mysql_query("SELECT  * FROM `categories` WHERE  с_url = '$c_id'  ",$db);

или
$rs=mysql_query("SELECT  * FROM `categories` WHERE  с_url = '".htmlspecialchars($_GET['category'])."'  ",$db);


фильтровать не надо
// отрезаем все ненужные симовлы
$category = preg_replace("/[^a-z]/i", "", $category);


мод-реврайт сам отфильтрует.....

  Ответить  
 
 автор: Trianon   (05.09.2008 в 09:21)   письмо автору
 
   для: serjinio   (05.09.2008 в 01:08)
 

Расстрелять.

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

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