|
|
|
| Здравствуйте!
Хотел посоветоваться с профессионалами,насчёт фильтрации данных.
Написал движок для себя и вот что-то засомневался в правильности фильтрации данных(защиты от хакерских аттак).
Хотелось бы услышать мнение профессионалов о конкретно моей ситуации.
Например:
Вводим 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."'");
|
Заранее благодарен за советы и замечания! | |
|
|
|
|
|
|
|
для: 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 записей это делать и не морочить голову.) | |
|
|
|
|
|
|
|
для: sim5
(04.09.2008 в 13:26)
| | Но тогда я не смогу замутить чистый ЧПУ.
Мне надо узнать правильно ли я фильтрую входящие данные? | |
|
|
|
|
|
|
|
для: Infocean
(04.09.2008 в 18:15)
| | Почему это не сможете "замутить"? В раздел Апач загляните, там мутят и не такое ;-) | |
|
|
|
|
|
|
|
для: sim5
(04.09.2008 в 18:23)
| | Если мутить,то адрес должен будит обязательно содержать id,а значит url будит выглядеть:
http://mysite.ru/1-news.html | |
|
|
|
|
|
|
|
для: Infocean
(04.09.2008 в 18:25)
| | Вы лучше зайдите в рекомендованный раздел и посмотрите примеры "замутения", их там предостаточно. А зпросы к базе, лучше по ID записям, это точно. | |
|
|
|
|
|
|
|
для: sim5
(04.09.2008 в 18:51)
| | Послушайте!!!
Я вам, конечно, благодарен, за советы использовать ID, но я итак знаю, что лучше использовать ID.
И в данный момент мне нужно чтобы использовались именно названия категорий.
Тема создавалась не для того чтобы вы мне советовали в какой раздел пройти, а для того чтобы мне посоветовали правильную проверку!!!
Мне нужно без всякого гемора сейчас всё сделать и уже завтра запустить движок!!!
Если мне надо будит изменить выдачу с имён категорий на их айдэ, то я всё сделаю сам. | |
|
|
|
|
|
|
|
для: Infocean
(04.09.2008 в 19:34)
| | Вы бы хотя б написали, из каких символов может это имя состоять.... | |
|
|
|
|
|
|
|
для: Trianon
(04.09.2008 в 20:05)
| | Я вас(Trianon) помню, вы мне с запросом помогали, за что огромное вам спасибо, но пришлось всё-таки использовать два отдельных запроса, т.к. Smarty отказывался выводить половину данных поступивших из базы!!!
А что разве из этого не видно какие символы нужны???:
// отрезаем все ненужные симовлы
$category = preg_replace("/[^a-z]/i", "", $category);
Входящие данные, только маленькие английские буквы.
А также я делаю проверку на существование категории в БД и если категории нет,то вывожу ошибку!
Вообщем, в принципе написанный движок можно посмотреть на этом сайте(_dpk8.ru-это мой тестовый домен), но вопрос о правильной фильтрации данных ещё открыт!!!
Если вдруг зайдя на сайт, вы обнаружите там уязимость, то прошу не Дефейсить сайт и не трогать ни чего на хосте, лучше сообщите здесь об этом и я постараюсь исправить допущенные ошибки!!!
Двигло ещё сырое и сейчас находится на стадии тестирования!!!
Заранее благодарен за советы и помощь!! | |
|
|
|
|
|
|
|
для: 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'");
//...
|
| |
|
|
|
|
|
|
|
для: Trianon
(04.09.2008 в 22:17)
| | Объясните,пожалуйста.
Почему не годится моя фильтрация?
Ведь все не нужные символы обрезаются и в БД поступают чистые английские буквы. | |
|
|
|
|
|
|
|
для: infocean
(05.09.2008 в 00:15)
| | Вам введенное имя нужно передать или отдельные буквы? | |
|
|
|
|
|
|
|
для: Trianon
(05.09.2008 в 00:20)
| | Передать нужно целое имя категории!
После получения данных GET,я фильтрую их(т.е. обрезаю и остовляю только английские буквы) и ставлю в запрос к БД,далее идёт проверка данных полученных из запроса и в зависимоти от результата выводится или ошибка или данные.
p.s. прошу прощения за возможные помарки в тексте,пишу с КПК. | |
|
|
|
|
|
|
|
для: Infocean
(04.09.2008 в 12:55)
| | Имеем ссылку
http://mysite.ru/index.php?category=news
|
переделываем ее в...
пишем в .htaccess
RewriteRule ^([A-Za-z]+)/?$ index.php?category = $1 [L]
|
или если
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);
|
мод-реврайт сам отфильтрует..... | |
|
|
|
|
|
|
|
для: serjinio
(05.09.2008 в 01:08)
| | Расстрелять. | |
|
|
|