Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   помогите с php (https://forum.antichat.xyz/showthread.php?t=19904)

temon 30.05.2006 11:55

помогите с php
 
Ребята.
Подскажите пожалуйста.
Вот в файле есть дыра, если в 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

вообще если нужно обезопаситься, то достаточно
PHP код:

$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
смотри мой пример, после запроса делаешь
PHP код:

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

Цитата:

Сообщение от ZaCo
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
Сам запрос построй следующим образом:
PHP код:

$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");


Время: 19:58