За последние 24 часа нас посетили 30368 программистов и 1753 робота. Сейчас ищут 850 программистов ...

перебор POST/GET

Тема в разделе "PHP для новичков", создана пользователем siiXth, 7 май 2011.

  1. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    вот подумал
    если я - неопытный пхп-программист работаю над своим проектом , cms-подобный и не хочу чтобы меня "похакали" на первый же день существования сайта , то я должен все входящие данные в скрипт проверять на наличие неуместных символов и т.д.
    и проверяем это с помощью (пример того как я делал это):
    PHP:
    1. <?
    2. $code = strip_tags(htmlspecialchars(stripslashes($_POST["code"])));
    3. ?>
    извините , но фак! как же много всего ! а ещё если с большим кол-вом переменных...

    и вот если подобную реализацию делать , то не легче делать это в index.php ?

    PHP:
    1. <?
    2. foreach($_POST as $key=>$value)
    3. {
    4. $_POST[$key]=strip_tags(htmlspecialchars(stripslashes($value)));
    5. }
    6.  
    7. foreach($_GET as $key=>$value)
    8. {
    9. }
    10. ?>
    ??? или все так и делают , а я вот только придумал ? =)
    ну и конечно ещё определённые данные приводим к тому самому определённому типу , но мне как неопытному человеку не хочется бояться за то что я где-то забуду чтото поставить и хочу быть уверен что похакиваний не будет
     
  2. alek_san4ek

    alek_san4ek Активный пользователь

    С нами с:
    25 апр 2011
    Сообщения:
    7
    Симпатии:
    0
    Еще есть очень нужная вещь, такая как mysql_real_escape_string()
    А если $_POST и $_GET у вас передают числовые значения, типо id, то используется еще (int)$_POST

    А вы уверены, что данная проверка всегда будет поключена, или имена переменных будут совпадать?
     
  3. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    у меня в классе стоит кажись
     
  4. alek_san4ek

    alek_san4ek Активный пользователь

    С нами с:
    25 апр 2011
    Сообщения:
    7
    Симпатии:
    0
    И все же, как вы собираетесь делать данную проверку универсальной, чтоб вызвать ее можно было откуда угодно?
     
  5. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    Ну какбы у меня лично всё обрабатывает 1 файл - index.php и в нём инклудятся остальные файлы. любая страница сайта работает через index.php

    ну и вот пример как будет работать

    index.php
    PHP:
    1. <?php
    2. echo "header";
    3. foreach($_POST as $key=>$value)
    4.  {
    5.  $_POST[$key]=strip_tags(htmlspecialchars(stripslashes($value)));
    6.  }
    7.  
    8.  foreach($_GET as $key=>$value)
    9.  {
    10.  $_GET[$key]=strip_tags(htmlspecialchars(stripslashes($value)));
    11.  }
    12. echo "content";
    13. if(count($_POST)!=0)
    14. echo print_r($_POST);
    15. echo "<br/>footer";
    16. include('post.php');
    17. ?>
    post.php
    PHP:
    1. <?php
    2. echo "<br/>post.php included!<br/>";
    3. if($_POST['submit'])
    4. {
    5.     echo $_POST['posttest'];
    6.     }
    7. ?>
    8. <form method="post">
    9. <input type="text" name="posttest" />
    10. <input type="submit" name="submit" value="submit" />
    11. </form>
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    siiXth
    а я тоже такую хрень забубенил - надоело, понимаешь
    PHP:
    1. <?php
    2.   //  // <editor-fold defaultstate="collapsed" desc="strget - берет искомый элемент из массивов POST или GET и приводит его к String указанной длинны">
    3.   static function strget($str='', $length = 255) {
    4.     if (isset($_POST[$str])) {
    5.       return trim(substr(trim($_POST[$str]), 0, $length));
    6.     }
    7.     if (isset($_GET[$str])) {
    8.       return trim(substr(trim($_GET[$str]), 0, $length));
    9.     }
    10.     return false;
    11.   }
    12.  
    13.   // </editor-fold>
    14.   //
    15.   // <editor-fold defaultstate="collapsed" desc="intget - берет искомый элемент из массивов POST или GET и приводит его к Integer">
    16.   static function intget($str='') {
    17.     if (isset($_POST[$str])) {
    18.       return intval($_POST[$str]);
    19.     }
    20.     if (isset($_GET[$str])) {
    21.       return intval($_GET[$str]);
    22.     }
    23.     return false;
    24.   }
    25.  
    26.   // </editor-fold>
    но стрипать таги заранее - не надо. =)
     
  7. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    мм , а конкретней ? почему ? )
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    siiXth
    а может они нужны =)
    может так оно и было задумано. зачем ты нападаешь на таги. таги такой же текст как и все! :D
    всю вот эту хрень надо бы убрать strip_tags(htmlspecialchars(stripslashes и применять только там где надо. почему ты их боишься?
     
  9. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    та не боюсь - экономлю время! =) а так же буду уверен что ниодин sqlinj не пробьётся никуда ))
    и у тебя обрезание 250 символов . а если это textarea и юзер много-много может написать о себе ?
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    siiXth
    ты от инъекции как раз ничерта не защитился :D

    siiXth
    и у тебя обрезание 250 символов
    таким образом задается дефолтное значение. т.е. если второй параметр функции НЕ будет указан - то 255 это будет максимум. А если будет - то все будет как требуется. Ты не знаком с дефолтными значениями? =)
     
  11. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    хны
    а как надо ? =D
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    siiXth
    mysql_real_escape_string
     
  13. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    я выше писал что у меня вроде в классе стоит )
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    siiXth
    оно не должно стоять в классе или где-то еще. эта функция должна применяться строго при создании запроса. Это не значит что она должна стоять в той же строке. Это значит, что после применения этой функции с переменной больше ничего не должно происходить. Т.к. если ты изменишь значение переменной частично, то надо будет прогнать ее через эскейпилку вторично, что может "заэскейпить заэскейпленное" и конфуз выйдет.
     
  15. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    ну в общем понятно
    раз говорите не долбать се мозги этим делом , то так и будем делать

    тоесть на входящие данные я смело кидаю strip_tags(htmlspecialchars(stripslashes и уже ПОСЛЕ того как обработал переменную перед запросом кидаю ни них все mysql_real_escape_string

    всё тру ? :D больше ничего не понадобится ?
     
  16. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    trip_tags(htmlspecialchars()) - ?
    Мдя, так вот где живут индусы.
     
  17. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    поменять местами. И вообще, после htmlspecialchars теги и так не работают.
     
  18. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    индусы подобный код выпускают , а я узнаю =)