Написал небольшую CMS. Почти написал. (наконец то) Возник вопрос безопасности. Любой человек может обратиться к модулям на моем сайте таким образом: http://site.ru/modules/module1.php Более того, вполне возможно передать им нехитрые POST-параметры и поудалять у меня из БД все. Грустная перспектива. Вопрос: как от это защититься? В общем можно: 1. Для файлов, которые require()'тся применять метод объявления во первоначальных файлах некоторой константы, проверяя его на существование во включаемых файлах. 2. Для файлов, которым передаются GET параметры проверять значения сессии. 3. А как же .htaccess? 4. Кроме того, я наткнулся на функцию flock(). Эффективно ли использовать ее? ОС - Windows.
4. Flock() — не то. 3. Пиши в него Deny from all и клади в папку modules 2. Не понял 1. Да, многие так делают. Неплохая дополнительная защита.
Точно, а в корне — только index.php и картинки! Жаль только, практически на всех shared-хостингах не проканает. Тебе поможет Deny from all =)
импользуй расширения отличные от php и запрет на показ файлов через .htaccess, а включать (include/require) пхп может любой файл.
Я вообще всё кроме index.php называю *.inc (*.htm для шаблонов), а у Lighttpd стоит по умолчанию запрет на ~* и *.inc, так что просто не доберуться при всём желании + сам модуль, это класс, так что даже если вызвать фаил напрямую, ничего не произойдёт, т.к. он даже инициализироваться не сможет
Я уловил твою мысль из пункта 1. Я год назад также делал, если конечьно к ним нету прямого обращение. В index.php стоял параметр: $inc_only = true; В файлах нежелаемые для чужих глаз: if ($inc_only != true) die(); Вариант выше каталога: У меня раньчше был модуль: include($_GET['file'].".php"); И один умник написал: index.php?file=../../module.php Я не был удевлен Для себя: а дыры есть в ht... или это самый надежный способ и можно не боятся? Я сам все что можно в <files> сую... могули я небезпокоится?
ппц.. тогда бы уж хотябы include($_SERVER['DOCUMENT_ROOT']."modules/"$_GET['file'].".php"); чтобы конкретно обломать запросы типа ../../../conf.inc это еще ладно, если только посмотрят, а то ведь и шелл могут приинклюдить... и без проблем на исполнение запустить..
А что все же делать с файлами, которым передаются GET-параметры на удаление например конкретных новостей. Можно любой простенькой формой без проблем передать такой. Как защититься?
Я вот понять не могу, почему переменные сессии в данном .php файле (куда GET-параметры передаются) не существуют.
а чем плох это вариант??? как его можно обойти?? никак!!! так почему бы не заюзать простое решение - тем более у вас CMS соответственно наверное расчитываете на различные серверные условия!!! )))
я в файлах, которые требуют защиты, в самом начале проверяю строку PHP_SELF, если в ней есть название текущего файла - то выдаю Header("Location: /"); die(); и все. вариант с .htaccess-ом тоже не плох, но он вернет юзеру страницу ошибки, что не очень хорошо со стороны юзабилити. можно конечно там же прописать ErrorDocument 403, и выкидывать его на главную страницу... меня мой вариант устраивает)