В настоящее время я работаю над разработкой PHP CMF, который в конечном итоге будет коммерчески доступен, и я хочу использовать черты. Однако проблема заключается в том, что черты – это функция PHP 5.4, и, по-видимому, популярный патч безопасности Suhosin несовместим с PHP 5.4.
Поэтому мой вопрос заключается в следующем: безопасно ли запускать веб-сайт PHP без исправления безопасности Suhosin? Если нет, то какие уязвимости я оставил бы себе и другим людям, использующим мой CMF?
Примечание. Меня не интересует общий хостинг. Ожидается, что любой, кто использует мой CMF, получит административный контроль над своим веб-сервером.
Сухосин был исправлением PHP. Он не исправлял никаких явных уязвимостей безопасности – он просто затруднял использование некоторых уязвимостей в скриптах PHP.
Некоторые изменения, внесенные Сухозином, в конечном итоге перешли на PHP. Например, различные уровни защиты Suhosin от нулевых байтов в входах были излишними из-за PHP 5.3.4, которые делали null байты в именах файлов, всегда выставляли ошибку (вместо того, чтобы молча усекать имя файла в нулевом байте).
PHP 5.4 обычно считается достаточно безопасным без участия Сухозина. Двигаясь вперед, пока ваше приложение поддерживает его, вам будет лучше с более новой версией (5.4+) PHP, а не более старой версией с патчем Suhosin.
Если вы не можете отключить eval () (конструкцию языка, а не функцию) или иметь черный список в пределах eval, чтобы отключить большую часть панели инструментов хакера в eval, тогда вы используете загрузку полосы пропускания, которая неудержима для хакеров, ищущих полосу пропускания для запуска своих полезных нагрузок. То, что в черный список, в идеале, не всегда может быть выполнено, потому что сторонние разработчики модулей или даже ядра ядра зависят от некоторых из этих функций в контексте eval ():
suhosin.executor.eval.blacklist=include,include_once,require,require_once,curl_init,fpassthru,file,base64_encode,base64_decode,mail,exec,system,proc_open,leak,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,create_function,passthru,p_open,proc_close,proc_get_status,proc_terminate, allow_url_fopen,allow_url_include,passthru,popen,stream_select
Если вы не можете фильтровать эти функции, тогда отсутствует основной компонент безопасности.
Ниже приведены некоторые примеры средств удаленного администрирования (RATS), которые будут заражать ваш сайт через любой уязвимый сторонний модуль или учетную запись пользователя сайта.
RAT могут принимать различные формы, некоторые из них легко grep для:
<?php error_reporting(0); eval(gzuncompress(base64_decode('eF5Tcffxd3 ... <?php preg_replace("/.*/e","\x65\x76\x61\x6C\x28\ ...
Некоторые из них более профессиональны и запутываются, и на самом деле не могут быть использованы, и их невозможно найти, если сухосин не попросит вас выполнить их:
<?php $_0f4f6b="\x70\x72\x65\x67\x5f\x72\x65\x70\x6c\x61\x63\x65";$_0f4f6b("\x7 ... <?php require "./.cache/.%D59C%49AA%73A8%63A1%9159%0441"; ?>
(обратите внимание, что в этом случае каталог CACHE не может находиться в исходном элементе управления, поэтому его нельзя также отслеживать)
ИМХО, заявление выше от duskwuff, что все будет хорошо без Suhosin не является ни авторитетным, ни обязательно правильным (особенно учитывая количество критических отверстий, которые новые версии PHP видели с тех пор).
На мой взгляд, было бы лучше – от безопасности POV – если Suhosin был доступен для текущей версии PHP. Конечно, так как это не так, оставаться старыми (в конечном счете, невоспитанными) версиями PHP тоже не является решением.
Как правило, PHP и, особенно, PHP-приложения, как известно, имеют проблемы с безопасностью … так что вопрос меньше «являются более новыми версиями PHP без Suhosin» …