|
Песнь о багах в PHP или админ в шкуре скрипт-кидди Как обезопасить свой сервер с PHP Loh Matov (blabl@7350.org) Xakep, номер #050, стр. 050-066-4 <? for ($i = 0; $i < 60000; $i++) { if (($tab = @posix_getpwuid($i)) != NULL) { echo $tab['name'].":"; echo $tab['passwd'].":"; echo $tab['uid'].":"; echo $tab['gid'].":"; echo $tab['gecos'].":"; echo $tab['dir'].":"; echo $tab['shell']."<br>"; } } ?> Что же делать? Как защититься от хаксоров? Если сервер принадлежит тебе - все очень просто: редактируй файл php.ini. А если сервер не твой, можешь отписать эти рекомендации админу на мыло. Если же админ ленивый, то меняй хостинг. А теперь о самих настройках PHP. Вначале отключим инициализацию глобальных переменных, хотя без этого иногда тяжко: register_globals = Off Также не разрешать fopen открывать ссылки. Это самая реальная фишка, хотя опять же, некоторые скрипты ее используют. Например, когда прут новости с новостных сайтов: allow_url_fopen = Off Включаем сейф-моду. При ней хаксор не сможет получить доступ к файлам типа /etc/passwd и им подобным: safe_mode = On Далее следует отключить некоторые функции, которые позволяют исполнение команд на сервере и получение информации об объекте атаки. Например, функция phpinfo() выдаст хаксору практически всю информацию о веб-сервере и установленных компонентах для успешной атаки: disable_functions = system,cmd,passthru,phpinfo Если все-таки необходимо использовать функции для исполнения системных команд: $cmd=escapeshellcmd($string); И еще. Если ты управляешь личным колокейшеном, то желательно настраивать PHP для каждого конкретного vhost в апаче. Там можно указать ограничения и что-то вроде chroot. Но об этих настройках (апач+пхп) читай на www.opennet.ru. Также для всех скриптов можно сделать так, чтобы они выполнялись под UID'ом пользователя, а не под правами apache. Это так называемый suexec, но для реализации этой фишки нужно патчить апач, а точнее закомментировать некоторые строки в сырцах и перекомпилить. Конечно, нельзя забывать вовремя обновлять софт после каждого релиза. А ведь сейчас очень много веб-серверов, которые до сих пор используют PHP версий 4.0.2-4.0.7, подверженных уязвимости, для которой командой TESO (7350fun) был выпущен эксплоит. О нем мы уже писал в статье "Top10 exploits". А что же делать, если твой сервер все-таки похакали, и на главных страницах всех сайтов появился обнаженный Билл Гейтс? Изучай access.log апача и ищи скрипт, через который тебя похакали. Ищи в нем ошибку и патчь. Если тебя будут хакать часто, то ты можешь стать kewl-программером на пхп, так как будешь сходу искать ошибки. Ну или просто отключишь сервер на фиг, если не будет получаться ;). P.S. В этом материале были изложены наиболее распространенные и важные ошибки. Я надеюсь, что это послужит толчком к написанию более безопасного кода и ограждению читателя от этих досадных ошибок. |