За последние 24 часа нас посетили 16929 программистов и 1674 робота. Сейчас ищут 1048 программистов ...

Учимся думать:

Тема в разделе "Прочее", создана пользователем флоппик, 27 фев 2010.

  1. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    я тоже использую goto, но когда сильно припрет =)
     
  2. Luge
    1. Пример не правильный, т.к. ты перекрыл любое значение, полученное из register_globals прямым присваиванием.
    2. Пример тоже легко решается проверкой инклудится этот файл, или вызывается.

    Я хочу, что бы вы привели пример случая, когда программист НЕ МОЖЕТ избежать влияния register_globals на код, вызывая этим проблему безопасности.
     
  3. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    PHP:
    1. <?php
    2. if(!isset($_GET['md']) && passwordOk()) {
    3.   $module = $_GET['md'];
    4. }
    5. if(isset($module) && ($module)) {
    6.   $includefile = $module . $admin . PHP_EXT;
    7. }
    8. include $includefile;
    9.  
    ))
     
  4. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Следующий пример не притянут за уши, а взят из реальной CMS, написаной для сайтов четырех маленьких ООО:
    PHP:
    1. <?php
    2. if (isset($login)) // login - имя кнопки submit формы
    3. {
    4.     /* сверка данных формы с данными из БД */
    5.     $admin = array(..); // сюда данные залогинившегося админа
    6.     $login_ok = 1;
    7. }
    8. // Далее везде, где проверяся на авторизированность
    9. if ($login_ok)
    10. {
    11.      ....
    С помощью register_globals можно не только "авторизироваться", но и использовать произвольные данные "администратора".
     
  5. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    мне кажется что флоппик намекает на то что регистр глобалс не является источником ошибок и если хорошо подумать то всегда можно защитится от его влияния - то есть это вопрос проектирования. А вот почему его сделали офф по дефолту, а не убрали совсем: он усложняет разработку так как нужно следить за пересекающимися переменными глобальными и внешними, и второе - ввиду большой распространенности языка - шанс что разработка ведется ответственным профессионалом стремится к 0, а наличие уязвимостей в конечном коде из-за включенного регистр_Глобалс понижает доверие к языку у заказчиков ...
     
  6. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    в том случае, когда переменная инициализируется явно проблем с безопасностью быть не может.
     
  7. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    nimistar
    в виду популярности использования php теми, кто пока или и потом думать не будет и отключили эту штуку, просто они не знают, что просто инициализировав каждую переменную перед использованием все уязвимости с регистрглобалс уходят в никуда
     
  8. +Sten+

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

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Все равно, что привести пример, когда программист не может избежать инъекции. Естественно, такого примера нет. Тоесть

    =вредна ли защита от дурака?
     
  9. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    флоппик
    а вот тут ты брось.
    и смешение пространств имён — это уже не проблема? Ещё какая, причём проблема человеко-часов, убитых на поиск такого перекрытия.
    а давайте без давайте…
    так можно любой код, иллюстрирующий возможные проблемы с безопасностью/логикой парой изменений превратить в безопасный. Пример не всегда должен быть реален.
    Вот один из примеров с php.net:
    PHP:
    1. <?php
    2. // define $authorized = true only if user is authenticated
    3. if (authenticated_user()) {
    4.     $authorized = true;
    5. }
    6.  
    7. // Because we didn't first initialize $authorized as false, this might be
    8. // defined through register_globals, like from GET auth.php?authorized=1
    9. // So, anyone can be seen as authenticated!
    10. if ($authorized) {
    11.     include "/highly/sensitive/data.php";
    12. }
    13. ?>
    тут тоже можно определить заранее $authorized; или даже в if проверить, что $authorized булево, а не NULL, если не определено, или string, если пришло из гет/пост/кук. Но тогда наглядный пример лишится своей наглядности.

    Когда мелкий лез в огонь, я тоже ему показал как сгорел лист бумаги, а не сувал свою руку, чтоб показать как она обуглится.

    вот это понравилось :)

    для обратной совместимости старых скриптов. В шестом убрали
     
  10. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Ммм, а вопрос то не про безопасность, а про вредность =)
    Конечно вреден. Потому что одноименные переменные, переданые разными методами перекрывают друг друга. Какое значение окажется конечным, зависит от настройки variables_order.
     
  11. Я уже хотел подвести итоги, но раз все так уцепились за РГ, то о них и поговорим сейчас :)
    На самом деле, там есть пара случаев, когда учесть влияние РГ практически невозможно. Даю намек - это связанно с массивами. Ну, может кто нить напряжется, и выдаст случай, когда это так? )
     
  12. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    флоппик
    да да да, можно передать массив гет запросом... влом писать ))
     
  13. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    флоппик

    extract?
     
  14. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ты про подмену типов массив <--> строка?

    что-то типа
    PHP:
    1. <?php
    2. $info['user'] = 'Luge';
    3. $info['pass'] = 'HD498734$8dflkj_S(23';
    4.  
    5. $u = isset($_GET['u'])?trim($_GET['u']):'';
    6. $p = isset($_GET['p'])?trim($_GET['p']):'';
    7.  
    8. if($info['user'] == $u && $info['pass'] == $p) {
    9.   echo 'опаньки';
    10. }
    11. ?>
    http://example.com/file.php?info=ab&u=H&p=H
     
  15. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Luge
    Не понял, массив же проинициализирован?
     
  16. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    в данном случае из-за ?info=ab $info определён как строка. И все следующие действия происходят уже со строкой
     
  17. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    хотя, $info = array(); сводит всю красоту на ноль и опять возвращаемся к разговору о наглядности примера и возможных способах исправления
     
  18. Хорошо... еще уточню:

    HTML:
    1. <input name="name[]"/>
    =)
     
  19. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Неужели /?_SERVER[REMOTE_ADDR]=Epic%20fail? Не могу щас проверить.
     
  20. Да. Один из примеров. Правда, на него влияет порядок разбора, и обычно оно не сработает, но иногда в зависимости от variables_order который из скрипта изменить нельзя, гарантирует, что ты сможешь его перекрыть всегда. т.е. это первый пример, когда независимо как написан скрипт, от настроек ты не защитишься.
     
  21. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ну, давай зце, рассказывай.

    зы. Suhosin патч порежет _SERVER[REMOTE_ADDR]. :)
     
  22. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    От идиотов вообще защититься сложно, особо когда они могут на что-то повлиять. Но все же не нужно в угоду "страшилкам" придумывать случаи, что кто-то поменял variables_order (тем более, что оно не меняется из скрипта)
     
  23. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    MiksIr
    Зато долбонутых на голову админов на хостингах хватает. Вместо того, что бы обрезать доступ к shell командам, они её вообще отрубают через safe mod, попутно отключая ещё кучу всего. И ещё докажи им что ты не идиот, особенно когда там сидит студент с опытом работы в год, а у тебя за плечами 5-7 лет опыта работы с PHP далеко не с CMS-ками, да и опыта администрирования поболее чем у него. Так что бывает что и variables_order меняют.

    А вообще к 6-ке много чего убрали паразитивного, и register_globals, и magic_quotes, и safe mode (а сколько хостеров получат по шапке в силу своей некомпетентности когда safe mode просто не будет существовать :D )
     
  24. Суть темы то была не в защите от идиотов. Я хотел посмотреть как "молодежь" попытается применить мышление к фактам, на которые нет очевидного ответа. Выяснилось, что они банально тему умело игнорировали, что значит - думать никому не надо. А что Luge, ты и нимистар думать умеют я и так знал. ))))

    Порадовал Volt(220) который дал на самом деле правильный ответ )
     
  25. Так же порадовали Крекер и [vs], которые сумели сформировать свое мнение на определенные факты.