PDA

Просмотр полной версии : помогите с php


temon
30.05.2006, 11:55
Ребята.
Подскажите пожалуйста.
Вот в файле есть дыра, если в stat.php?=-1 то
mysql_fetch_row():. Короче можно sql инжекцию потом сделать.
чТО НУжно добавить в файл stat.php, чтобы при ошибочном запросе к sql выходило сообщения что нет такой статьи.
Заранее спаисбо.

ferryman
30.05.2006, 12:07
if (!mysql_num_rows($result)){
print 'Not found';
}else{
print 'OK';
}

temon
30.05.2006, 20:47
большое спасибо.
проверю, если работает то огромное спасибо.

temon
30.05.2006, 21:54
не катит совсем.
выходит сообщение нот фаунд и все равно
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /xxxxx/mainfile.php on line 526
Может сорс всего файла стат написать. чтобы понятнее было.

Boxa
31.05.2006, 03:56
у тебя mysql_query запрос ошибочный. mysql_error()ом проверь

temon
31.05.2006, 06:44
я в php не гуру.
каким образом проверить?

Trinux
31.05.2006, 08:40
после mysql_query(); ставишь echo mysql_error(); или mysql_query() or die(mysql_error());

ZaCo
31.05.2006, 12:06
так тут человеку защититься нужно как я понял. если только с '-' прокатывает то это не дыра. лучше сделай сразу $id=intval($id>=0?$id:0);

Trinux
31.05.2006, 14:04
вообще если нужно обезопаситься, то достаточно
$query=mysql_query("SELECT 1 FROM table WHERE id='".addslashes($id)."' LIMIT 1");
if(mysql_num_rows($query)){
...

ZaCo
31.05.2006, 14:18
только он число передает ;)

NaX[no]rT
31.05.2006, 14:56
А можешь просто @ поставить, чтобы вообще ничего не выдавало (:

temon
31.05.2006, 15:27
не у меня так не толкьо с - прокатывает. там если просто, статьи скажем не существует с id=122, то будет еррор вылазить.

Trinux
31.05.2006, 16:36
2 ZaCo
а какая разница? мой опыт мне подсказывает что любые передаваемые пользователем данные нужно ОБЯЗАТЕЛЬНО слешировать и обособлять ковычками.

2 Аннет
Это не правильный выход в данной ситуации. Даже если не будет сообщения о ошибке, обнаружить sql-inj реально

2 temon
смотри мой пример, после запроса делаешь
if(mysql_num_rows($query)){
и только потом уже все остальное

temon
31.05.2006, 21:04
большое спасибо.

ZaCo
31.05.2006, 21:20
2Trinux не еслиобособлять то ясное дело. но не зря же придумали типы int? и where все-таки по-быстрее сработает при поиске числа нежели строки...

Trinux
31.05.2006, 21:38
2Trinux не еслиобособлять то ясное дело. но не зря же придумали типы int? и where все-таки по-быстрее сработает при поиске числа нежели строки...
мускул оптимизирует этот процесс. прирост производительности без ковычек не очень то и большой.

temon
02.06.2006, 11:37
я сделал вот так
if(!mysql_num_rows($result)){
include ("404.php");
}else{

и все пашет прекрасно.
когда нету статьи с каким то айдишником то вылазит страница 404.
НО.
Если сделать следующий запрос: id='
то
вылазит опять страница 404 но
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in z:\home\phpbbproverka.nefig.ru\www\sing\stat.php on line 18
Что делать?

NaX[no]rT
02.06.2006, 11:57
if(@!mysql_num_rows($result)){
include ("404.php");
}else{

2 раз говорю, не называй меня Аннет (:
Конечно есть, но стимула никакого нет, да и кто знает что у него там и как
а на $id поставь вот так
if (gettype($id) !== "integer" || $id<0) { include ("404.php"); }

Trinux
02.06.2006, 12:01
2 Аннэт
А мне нравится =))) красивое имя.

2 temon
Сам запрос построй следующим образом:
$query=mysql_query("SELECT bla FROM bla WHERE id='".addslashes($id)."' LIMIT 1");
Если id поле обозначено как NULL - убрать к фигам.

ferryman
02.06.2006, 18:57
Какой блин include?? Нафиг он там? У тебя ошибка вылазит с твоим инклудом.. header("Location: $page");