помогите с php

Discussion in 'PHP' started by temon, 30 May 2006.

  1. temon

    temon Elder - Старейшина

    Joined:
    6 Feb 2005
    Messages:
    114
    Likes Received:
    4
    Reputations:
    0
    Ребята.
    Подскажите пожалуйста.
    Вот в файле есть дыра, если в stat.php?=-1 то
    mysql_fetch_row():. Короче можно sql инжекцию потом сделать.
    чТО НУжно добавить в файл stat.php, чтобы при ошибочном запросе к sql выходило сообщения что нет такой статьи.
    Заранее спаисбо.
     
  2. ferryman

    ferryman Elder - Старейшина

    Joined:
    13 Feb 2006
    Messages:
    88
    Likes Received:
    8
    Reputations:
    5
    if (!mysql_num_rows($result)){
    print 'Not found';
    }else{
    print 'OK';
    }
     
  3. temon

    temon Elder - Старейшина

    Joined:
    6 Feb 2005
    Messages:
    114
    Likes Received:
    4
    Reputations:
    0
    большое спасибо.
    проверю, если работает то огромное спасибо.
     
  4. temon

    temon Elder - Старейшина

    Joined:
    6 Feb 2005
    Messages:
    114
    Likes Received:
    4
    Reputations:
    0
    не катит совсем.
    выходит сообщение нот фаунд и все равно
    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /xxxxx/mainfile.php on line 526
    Может сорс всего файла стат написать. чтобы понятнее было.
     
  5. Boxa

    Boxa New Member

    Joined:
    6 May 2006
    Messages:
    9
    Likes Received:
    0
    Reputations:
    -2
    у тебя mysql_query запрос ошибочный. mysql_error()ом проверь
     
  6. temon

    temon Elder - Старейшина

    Joined:
    6 Feb 2005
    Messages:
    114
    Likes Received:
    4
    Reputations:
    0
    я в php не гуру.
    каким образом проверить?
     
  7. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    после mysql_query(); ставишь echo mysql_error(); или mysql_query() or die(mysql_error());
     
    _________________________
  8. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    так тут человеку защититься нужно как я понял. если только с '-' прокатывает то это не дыра. лучше сделай сразу $id=intval($id>=0?$id:0);
     
    1 person likes this.
  9. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    вообще если нужно обезопаситься, то достаточно
    PHP:
    $query=mysql_query("SELECT 1 FROM table WHERE id='".addslashes($id)."' LIMIT 1");
    if(
    mysql_num_rows($query)){
    ...
     
    _________________________
    #9 Trinux, 31 May 2006
    Last edited: 31 May 2006
  10. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    только он число передает ;)
     
  11. NaX[no]rT

    NaX[no]rT Members of Antichat

    Joined:
    3 Sep 2005
    Messages:
    489
    Likes Received:
    201
    Reputations:
    202
    А можешь просто @ поставить, чтобы вообще ничего не выдавало :)
     
    _________________________
  12. temon

    temon Elder - Старейшина

    Joined:
    6 Feb 2005
    Messages:
    114
    Likes Received:
    4
    Reputations:
    0
    не у меня так не толкьо с - прокатывает. там если просто, статьи скажем не существует с id=122, то будет еррор вылазить.
     
  13. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    2 ZaCo
    а какая разница? мой опыт мне подсказывает что любые передаваемые пользователем данные нужно ОБЯЗАТЕЛЬНО слешировать и обособлять ковычками.

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

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

    temon Elder - Старейшина

    Joined:
    6 Feb 2005
    Messages:
    114
    Likes Received:
    4
    Reputations:
    0
    большое спасибо.
     
  15. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    2Trinux не еслиобособлять то ясное дело. но не зря же придумали типы int? и where все-таки по-быстрее сработает при поиске числа нежели строки...
     
  16. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    мускул оптимизирует этот процесс. прирост производительности без ковычек не очень то и большой.
     
    _________________________
  17. temon

    temon Elder - Старейшина

    Joined:
    6 Feb 2005
    Messages:
    114
    Likes Received:
    4
    Reputations:
    0
    я сделал вот так
    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
    Что делать?
     
  18. NaX[no]rT

    NaX[no]rT Members of Antichat

    Joined:
    3 Sep 2005
    Messages:
    489
    Likes Received:
    201
    Reputations:
    202
    Code:
    if(@!mysql_num_rows($result)){
    include ("404.php");
    }else{
    
    2 раз говорю, не называй меня Аннет :)
    Конечно есть, но стимула никакого нет, да и кто знает что у него там и как
    а на $id поставь вот так
    Code:
    if (gettype($id) !== "integer" || $id<0) { include ("404.php"); } 
     
    _________________________
  19. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    2 Аннэт
    А мне нравится =))) красивое имя.

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

    ferryman Elder - Старейшина

    Joined:
    13 Feb 2006
    Messages:
    88
    Likes Received:
    8
    Reputations:
    5
    Какой блин include?? Нафиг он там? У тебя ошибка вылазит с твоим инклудом.. header("Location: $page");