За последние 24 часа нас посетили 19500 программистов и 1964 робота. Сейчас ищут 1516 программистов ...

фильтрация переменных в url

Тема в разделе "Вопросы от блондинок", создана пользователем sey, 28 янв 2008.

  1. sey

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

    С нами с:
    28 янв 2008
    Сообщения:
    32
    Симпатии:
    0
    всем привет. пожалуйста помогите, как составить скрипт, меньше строков, быстро работающий и эффективный. как можно фильтровать. на пр: url cat=mycat&act=some&id=22, только использоват эти переменные, а если будут другие тогда сообщение "Dont try to hack me". заранее спасибо.
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    проконтролируй какие индексы в $_GET. если только нужные - все нормально. если есть ненужные -
    а нафига это нада? выключи register_globals и пиши все явно указывая глобальный массив откуда ожидаешь данные и строго указывай тип данных.
     
  3. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    посчитать количество переменных в GET, сравнить имена переменных с заранее определёнными, подучить русский язык
     
  4. sey

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

    С нами с:
    28 янв 2008
    Сообщения:
    32
    Симпатии:
    0
    я тоже так сделал, но скрипт получился .....

    а как это делать?

    спасибо вам.
     
  5. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    PHP:
    1. <?php
    2. $allows = array('cat','act','id');
    3. $ok = true;
    4. if(count($_GET)!=count($allows))
    5.     $ok = false;
    6.    
    7. foreach($_GET as $index)
    8. {
    9.     if(!in_array($index, $allows))
    10.         $ok = false;
    11. }
    12.  
    13. if(!$ok)
    14.     die('Dont try to hack me');
    15. ?>
    причем блок кода можно в функцию вытащить поместив ее в общий функционал, а в нужном месте ее вызывать
    PHP:
    1. <?php
    2. /** ЭТО В ОБЩАГУ **/
    3. function checkGET( $allows )
    4. {
    5.     if(count($_GET) != count($allows))
    6.         return false;
    7.    
    8.     foreach($_GET as $index)
    9.     {
    10.         if(!in_array($index, $allows))
    11.             return false;
    12.     }
    13.  
    14. return true;
    15. }
    16.  
    17.  
    18. /** А ТАК ДЕЛАТЬ ЕЕ ВЫЗОВ В НУЖНОМ МЕСТЕ **/
    19. if(!checkGET(array('cat','act','id')))
    20. {
    21.     // тут твое сообщение "антихак"
    22. }
    23. ?>
    дальше додумывай сам


    а в php.ini отредактировать.
     
  6. sey

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

    С нами с:
    28 янв 2008
    Сообщения:
    32
    Симпатии:
    0
    спасибо вам Ganzal.
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Ganzal
    всё же
    PHP:
    1. <?php
    2. foreach($_GET as $index => $val)
    3. {
    4.          if(!in_array($index, $allows))
    5.              return false;
    6. }
    7. ?>
    а то получается, что сравниваешь предполагаемые ключи со значениями из $_GET :)
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Luge точно, температура сказывается... хоть бы нацедил стаканчик для дизинфекции, а то вон зажал целую цистерну ))))
     
  9. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Ụ на мензурку )))