Pull to refresh

Comments 34

UFO just landed and posted this here
Весьма полезно, попробую и даже обращусь к вам с вопросами
Обращайтесь, помогу чем смогу =)
наработок на самом деле много, но до ума доведены не много =)
UFO just landed and posted this here
тоже хорошее решение, я просто привел пример. Реализация может быть любой.
для большинства случаев вроде простого первичного контроля файлов можно обойтись размером и датой модификации... а хеш надежнее конечно, но лучше опцией ;)
В любом случае, это не самый надежный способ, т.к. если человек, который проник на сайт не для банального дефейса и захочет скрыть свои следы, то данный способ защиты не спасет, но как вариант можно использовать.
для этих целей можно использовать aide

http://sourceforge.net/projects/aide

входит в состав СentOS / RHEL
В принципе поставить скрипт на крон и хранить md5 хеши и список файлов вместо размеров и дат может получится неплохо. Хотя конечно защита условная, сработает только если она заметит изменения раньше, чем хакер заметит защиту.
Ах да, и прогоните код через Source Code Highlighter. хотябы на C# - будет выглядеть значительно читабельнее

И пофиксите ошибки со скобочками &lt
Замечательный велосипедостроительный пример с использованием БД. Ну, или когда вебдевелопер пытается решать проблемы сисадмина.

Вы спросите любого админа, он вам сходу назовет с пяток готовых и проверенных временем программ разного калибра, для решения этой проблемы.
Это решение для простеньких проектов на удаленном хостинге. Где у тебя сисадмина нет, а админу хостинга на тебя вообще пофиг
верно, когда-то я свою хоумпагу так проверял, и процентов 70 недохакеров так попадались. Даже после полного удаления, скрипт чекал файлы и если отсутствовали или были изменены, то делался откат.
Данное решение интересно, и очень полезно для тех кто не знает готовых решений. Если не сложно, вы можете дать ссылки на готовые решения, будет интересно ознакомиться
самый лучший каталог админского софта на все случаи жизни находится на opennet.ru
Неплохое решение — требую ;) переноса из персонального блога в какой-нибудь тематический, допустим в php.
Все хорошо, только зачем отвлекать админа письмами. Надо просто из бэкапа восстановить файлики и все. Потом уж написать чтобы пароли если чо поменял.
Если взломщик имеет доступ к сайту и имеет возможность удалять и изменять всякие файлы то надо срочно известить об этом всеми возможными способами нужных людей, а не по-тихому восстанавливать что можно.
У вас как всегда — "Пока гром не грянет"
Лучше восстановить и известить. Ато вдруг админ забухал, да может и не админ он вовсе уже.
И будет кривой сайт, распространять например вирусню, пока там чел почту проверит.
hmph...
Глупый(?) совет: запретите запись на файлы и/или целые директории (chmod 555, к примеру) и гоняйте все левые запросы через 1 php-файл (dispatcher). Который в свою очередь будет смотреть на URI запроса, и по нему выдавать то, что вы сами захотите. Или не выдавать, если не захотите. Впрочем, chmod не обязательно, если не используются тривиальные названия вроде index.php, /admin , config.php

прописываем в .htaccess (подразумевается что хостинг крутится на сервере Apache):
Options -Indexes
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !\.(jpg|jpeg|gif|bmp|png|css|js|txt|rar|zip|htm|html)$
RewriteRule ^(.*) /dispatcher.php
(все запросы, кроме тех, что оканчиваются расширением, указанным в регулярном выражении RewriteCond, перенаправляются на dispatcher.php)

В dispatcher.php получаем $uri = $_SERVER["REQUEST_URI"]; , и уже от него пляшем дальше.

Например, запрос "http://site.ru/config.php" превратится в запрос "http://site.ru/dispatcher.php". В dispatcher смотрим на $uri (в данном случае $uri == "/config.php") , и решаем, какой палец (или страничку) показать незадачливому искателю приключений на пятую точку. Чаще всего это просто 404. Таким образом, даже если "хакер" зальет вам на сайт очередной шедевр студии «Private», вам останется только посмотреть неплохой фильм, либо посетовать на скудность фантазии некоторых режиссеров. Поскольку попытка открыть "http://site.ru/me_hacking_you_very_much/yet_another_18.avi" на самом деле перенаправится на тот же диспатчер, в котором $uri == "/me_hacking_you_very_much/yet_another_18.avi". Ну а поскольку нам такой URI не нравится, пишем 404. При этом запросы на /css/general.css , /images/header.png будут работать, как и работали.

Реализацию кода на примере не писал намеренно по двум причинам: 1. пусть это останется как домашнее задание для практики; 2. html, как ни странно, использовать всеравно не могу, а без него код будет страшным.

Это были мысли вслух на тему "лучше предохранятся, чем лечится".
ну это реализация некоего контроллера, который парсит URI...Решений много, это одно из них
Тут только нужно подумать, чтобы не гнать весь трафик через dispatcher
например большие файлы.
А это уже учтено:
RewriteCond %{REQUEST_FILENAME} !\.(jpg|jpeg|gif|bmp|png|css|js|txt|rar|zip|htm|html)$
Там указан список расширений файлов, которые отдаются "напрямую", в обход "контролера"
да, но если добавить туда avi и взять пример из вашего примера.
т.е. пользователь avi увидит.

я думаю как раз над этой проблемой. мне нужно отдавать например avi только определенным пользователям. как бы это сделать?

ps: у меня сделано почти один в один как в примере.
Как вариант - используйте проверку Referrer'а.
Пользователь заходит в секретную часть сайта, там нажимает на ссылку «/video/pron.avi» , а в директории /video/ сидит .htaccess , который проверяет реферер (откуда пришел юзер). Если пришел не с секретной части сайта — отправляем в лес. Впрочем, реф можно подменить, и почти все качалки умеют это делать.

Так что второй вариант — server-side авторизация, через htpasswd и HTTPAuth:
Options -Indexes
AuthType Basic
AuthName "Achtung, minen!"
AuthUserFile /path/to/.httpwd
Require user someusername

Он гораздо геморройнее в использовании, но и на порядок надежнее.

Более что-т мне не приходит на ум вариантов. Если кто знает ещё способы защиты файлов, кроме перечисленных двух (и исключая прогонку данных через контролер), напишите, будет интересно почитать.
Впринципе пока тормозов с прогонкой не наблюдалось, но думается мне что они возможны. Ок, если придумаю - черкну.
подскажите примерно что написать в dispatcher.php? типа -
if (preg_match ('/news.php?id=/d',$uri)) header ('Location: '.$uri);
И все нужные странички тогда поместить в array, в котором будут хранится паттерны для регулярок? Это правильное решение?
можно просто инклудить тот файл к которому обращаемся зачем header? так у вас зациклится.
точно. глупость написал. Тогда регулярки не нужны, можно проверять strstr();
вообще идея с dispatcher-ом очень понравилась.
Ну тогда уж можно сделать еще пару шагов и сделат ссылки в виде modeule/mode/id (например)
uri эесплодить и сваливать в переменные. Ну это уже чтоб совсем красиво было.
Вобще у меня 2 диспатчера. Один для html, другой для файлов. Иногда удобно задавать специальные заголовки для файлов. Или проверять права. Основной проверочный модуль инклудится в оба диспатчера (чота мне слово понравилось, что означает даже не знаю), поэтому излишнего кода нет.
dispatcher
1) тот, кто посылает, отсылает, отправляет по назначению; отправитель
...
3) диспетчер, организующая программ
Хм. А зачем мучиться, если есть системы контроля версий? Тот же svn status сообщит нам абсолютно все, а в случае подмены svn revert спасет все взад :). Настроить тот же Apache на отказ в просмотре .svn директорий - простейшее дело.
Sign up to leave a comment.

Articles