PHP и безопасность.
Статья перенесена из старого блога.
Первое, что нужно сделать. Это ограничить выполнение системных команд через php.
А так же, закрыть большинство опасных функций в eval().
Вносим изменения в настройки php.ini
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,exec,system,popen,proc_open,shell_exec,eval,passthru,copy
После, нужно установить Suhosin модуль для php. Через него, мы сможем закрыть выполнение произвольного кода (eval) внутри пхп.
Когда установите и подключите suhosin - добавьте в файл php.ini следующее:
[suhosin]suhosin.executor.disable_eval = 0suhosin.executor.eval.blacklist = "include,include_once,require,require_once,curl_init,fpassthru,file,base64_encode,base64_decode,mail,exec,system,proc_open,leak,syslog,pfsockopen,shell_exec,ini_restore,symlink,stream_socket_server,proc_nice,popen,proc_get_status,dl, pcntl_exec, pcntl_fork, pcntl_signal,pcntl_waitpid, pcntl_wexitstatus, pcntl_wifexited, pcntl_wifsignaled,pcntl_wifstopped, pcntl_wstopsig, pcntl_wtermsig, socket_accept,socket_bind, socket_connect, socket_create, socket_create_listen,socket_create_pair,link,register_shutdown_function,register_tick_function,file_get_contents,file,fopen,fsockopen,readdir,mysql_connect,mssql_connect,copy,url_exec,proc_terminate"suhosin.post.max_vars = 4096suhosin.get.max_value_length = 2000suhosin.request.max_varname_length = 350suhosin.request.max_vars = 4096
И перезагрузите apache.
На этом, основная часть работы завершена. Но все же, я бы посоветовал на этом не останавливаться.
Проверьте, на всех своих сайтах, на всех своих cms есть ли в папке upload(s) наличие файла .htaccess .
В нем должны содержаться примерно такие строки:
<Files ~ "^.*\.(php|cgi|pl|php3|php4|php5|php6|phtml|shtml)"> Order allow,deny Deny from all</Files>
Данные строки запрещают выполнение/запуск файлов, которые перечислены выше. В данном каталоге и во всех, что находятся внутри текущего каталога.
Что на это даст?
Дело в том, что большинство распространенных движков, зачастую имеют уязвимости. Через которые вам могут загрузить шеллы. И как правило, грузятся они чаще всего в папку аплодс.
А с помощью данного правила для apache, вы сможете воспрепятствовать их запуску. Даже, если вам все-таки загрузили его.
На этом, пока все. Если что-то вспомню, дополню статью.