За последние 24 часа нас посетили 17518 программистов и 1727 роботов. Сейчас ищут 1469 программистов ...

Ограничение доступа к файлам

Тема в разделе "PHP для новичков", создана пользователем D.Lans, 9 мар 2007.

  1. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Написал небольшую CMS.
    Почти написал.
    (наконец то) :)

    Возник вопрос безопасности.

    Любой человек может обратиться к модулям на моем сайте таким образом:
    http://site.ru/modules/module1.php

    Более того, вполне возможно передать им нехитрые POST-параметры и поудалять у меня из БД все.
    Грустная перспектива.

    Вопрос: как от это защититься?

    В общем можно:
    1. Для файлов, которые require()'тся применять метод объявления во первоначальных файлах некоторой константы, проверяя его на существование во включаемых файлах.

    2. Для файлов, которым передаются GET параметры проверять значения сессии.

    3. А как же .htaccess?

    4. Кроме того, я наткнулся на функцию flock(). Эффективно ли использовать ее?

    ОС - Windows.
     
  2. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Плз покажите рабочие примеры, например, из своих проектов.
     
  3. Anonymous

    Anonymous Guest

    4. Flock() — не то.
    3. Пиши в него Deny from all и клади в папку modules
    2. Не понял
    1. Да, многие так делают. Неплохая дополнительная защита.
     
  4. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    1 и 3 - имхо, вполне достаточно.
     
  5. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    храни все выше корня сайта
     
  6. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Поместить эти файлы на уровень выше доступа по http
    я так обычно и делаю
     
  7. Anonymous

    Anonymous Guest

    Точно, а в корне — только index.php и картинки!
    Жаль только, практически на всех shared-хостингах не проканает. Тебе поможет Deny from all =)
     
  8. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда

    импользуй расширения отличные от php и запрет на показ файлов через .htaccess, а включать (include/require) пхп может любой файл.
     
  9. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    .htaccess оказался прекрасным решением. :)

    Благодарю всех за советы.
     
  10. Psih

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

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Я вообще всё кроме index.php называю *.inc (*.htm для шаблонов), а у Lighttpd стоит по умолчанию запрет на ~* и *.inc, так что просто не доберуться при всём желании + сам модуль, это класс, так что даже если вызвать фаил напрямую, ничего не произойдёт, т.к. он даже инициализироваться не сможет :)
     
  11. xak2

    xak2 Guest

    Я уловил твою мысль из пункта 1. Я год назад также делал, если конечьно к ним нету прямого обращение.
    В index.php стоял параметр:
    $inc_only = true;
    В файлах нежелаемые для чужих глаз:
    if ($inc_only != true) die();

    Вариант выше каталога:
    У меня раньчше был модуль:
    include($_GET['file'].".php");
    И один умник написал:
    index.php?file=../../module.php

    Я не был удевлен :)

    Для себя: а дыры есть в ht... или это самый надежный способ и можно не боятся? Я сам все что можно в <files> сую... могули я небезпокоится?
     
  12. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    ппц..
    тогда бы уж хотябы include($_SERVER['DOCUMENT_ROOT']."modules/"$_GET['file'].".php");

    чтобы конкретно обломать запросы типа ../../../conf.inc
    это еще ладно, если только посмотрят, а то ведь и шелл могут приинклюдить... и без проблем на исполнение запустить..
     
  13. xak2

    xak2 Guest

    это было давно :D
     
  14. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    А что все же делать с файлами, которым передаются GET-параметры на удаление например конкретных новостей.
    Можно любой простенькой формой без проблем передать такой.

    Как защититься?
     
  15. Anonymous

    Anonymous Guest

    D.Lans, аунтентификация в скриптах =)
     
  16. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    D.Lans

    или апач-авторизация
     
  17. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Я вот понять не могу, почему переменные сессии в данном .php файле (куда GET-параметры передаются) не существуют.
     
  18. Anonymous

    Anonymous Guest

    D.Lans, дык ты пример покажи.
    Как называются файлы, как параметры передаются...
     
  19. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Разобрался.
    Как я мог забыть про session_start() перед проверкой переменных сессии.
     
  20. enshtein

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

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    а чем плох это вариант??? как его можно обойти?? никак!!! так почему бы не заюзать простое решение - тем более у вас CMS соответственно наверное расчитываете на различные серверные условия!!! )))
     
  21. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    любитель-некрофил :)
     
  22. creage

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

    С нами с:
    12 мар 2008
    Сообщения:
    131
    Симпатии:
    0
    Адрес:
    Киев
    я в файлах, которые требуют защиты, в самом начале проверяю строку PHP_SELF, если в ней есть название текущего файла - то выдаю Header("Location: /"); die(); и все. вариант с .htaccess-ом тоже не плох, но он вернет юзеру страницу ошибки, что не очень хорошо со стороны юзабилити. можно конечно там же прописать ErrorDocument 403, и выкидывать его на главную страницу... меня мой вариант устраивает)