Есть ли разница между модулем apache и cgi (относительно безопасности)?

Например, более безопасно использовать mod_php вместо php-cgi? Или более безопасно использовать mod_perl вместо традиционного cgi-scripts?

Меня в основном интересуют проблемы безопасности, но скорость может быть проблемой, если есть существенные различия.


person Sarien    schedule 16.09.2008    source источник
comment
Я понимаю, что этот вопрос устарел, но разве теперь он не должен перейти к Ошибке сервера?   -  person Stefan Marinov    schedule 04.03.2014
comment
@smarinov, так и должно быть. Но у SO странная политика по отношению к старым тредам, которую можно выразить одним словом: лень. ТАК не волнует.   -  person Pacerier    schedule 26.03.2015


Ответы (6)


Безопасность в каком смысле? В любом случае это действительно зависит от того, какой скрипт работает и насколько хорошо он написан. Слишком много сценариев в наши дни недоработаны и не выполняют должным образом проверку ввода.

Я лично предпочитаю FastCGI mod_php, поскольку, если процесс FastCGI умирает, будет создан новый, в то время как я видел, как mod_php полностью уничтожает Apache.

Что касается безопасности, с FastCGI технически вы можете запустить процесс php под другим пользователем, отличным от пользователя веб-серверов по умолчанию.

Отдельное примечание: если вы используете новую поддержку рабочих потоков Apache, вам нужно убедиться, что вы не используете mod_php, поскольку некоторые из расширений не являются потокобезопасными и вызовут состояние гонки.

person X-Istence    schedule 16.09.2008
comment
Я работаю с mod_php уже год и никогда не видел, чтобы дочерний процесс полностью убивал Apache. - person wlf; 13.10.2013
comment
@wlf, 1 год - это совсем немного. уже 3 года. Так оно еще живо? - person Pacerier; 26.03.2015

Если вы запускаете свой собственный сервер, используйте модуль, это несколько быстрее. Если вы находитесь на общем сервере, решение уже принято за вас, обычно на стороне CGI. Причиной этого являются разрешения файловой системы. PHP как модуль работает с разрешениями http-сервера (обычно «apache»), и если вы не можете изменить свои скрипты для этого пользователя, вы должны изменить их на 777 - доступный для чтения всем. Это означает, увы, что ваш сосед по серверу может взглянуть на них — подумайте, где вы храните пароль доступа к базе данных. Большинство общих серверов решили эту проблему, используя такие вещи, как phpsuexec и тому подобное, которые запускают сценарии с разрешениями владельца сценария, поэтому вы можете (должны) изменить свой код на 644. Phpsuexec работает только с PHP как CGI - это более или менее все , это просто локальная машинная вещь - не имеет значения для мира в целом.

person djn    schedule 16.09.2008
comment
Настройка CGI более безопасна. но медленнее. Но также см. stackoverflow.com/a/10439720/632951 - person Pacerier; 03.04.2015

Большинство дыр в безопасности возникают из-за плохого программирования в самом скрипте, поэтому это действительно спорно, если они запускаются как cgi или в модулях. Тем не менее, модули apache потенциально могут привести к сбою всего веб-сервера (особенно при использовании многопоточного MPM), и mod_php известен этим.

cgi будет медленнее, но в настоящее время есть решения для этого, в основном FastCGI и его друзья.

Какова ваша модель угроз?

person Vinko Vrsalovic    schedule 16.09.2008
comment
Если скрипт слабый, это не значит, что мы прекращаем защищать сервер. Оба должны быть сильными. Модель угроз заключается в предотвращении доступа к файлам неавторизованных лиц. Доступ должен осуществляться только через PHP-скрипты. - person Pacerier; 26.03.2015

Из документа PHP install.txt для PHP 5.2.6:

Модули сервера обеспечивают значительно более высокую производительность и дополнительные функциональные возможности по сравнению с двоичным файлом CGI.

Для IIS/PWS:

Предупреждение

Используя настройку CGI, ваш сервер открыт для нескольких возможных атак. Пожалуйста, прочитайте наш раздел безопасности CGI, чтобы узнать, как защитить себя от этих атак.

person Scott Swezey    schedule 16.09.2008

Модуль, такой как mod_php или FastCGI, невероятно быстрее, чем обычный CGI. Просто не делайте CGI. Как уже говорили другие, сама программа PHP представляет собой наибольшую угрозу безопасности, но игнорируя еще одно соображение на общих хостах.

Если ваш скрипт находится на общем хосте с другими php-программами, а хост не работает в безопасном режиме, то вполне вероятно, что все серверные процессы выполняются от имени одного и того же пользователя. Это может означать, что любой другой php-скрипт может читать ваши собственные, включая пароли к базе данных. Поэтому обязательно изучите конфигурацию сервера, чтобы убедиться, что ваш код не читается другими.

Даже если вы управляете своим собственным хостингом, имейте в виду, что другое взломанное веб-приложение на сервере может быть каналом для других.

person DGM    schedule 17.09.2008

Использование встроенного модуля определенно будет быстрее, чем использование CGI. Последствия для безопасности зависят от конфигурации. В конфигурации по умолчанию они почти одинаковы, но cgi позволяет использовать более безопасные конфигурации, которые не могут обеспечить встроенные модули, особенно в контексте общего хостинга. От чего именно вы хотите себя обезопасить?

person Leon Timmermans    schedule 16.09.2008
comment
Я не имею в виду никакой особой угрозы. Но на одном компьютере размещено несколько страниц. - person Sarien; 17.09.2008
comment
Вы должны решить, от чего вы хотите защитить себя в первую очередь. Эти страницы принадлежат одному и тому же лицу/учреждению? ЕСЛИ нет, вам следует рассмотреть любое из различных решений для запуска разных php-скриптов от имени разных пользователей, например (suphp, использование виртуальных хостов и обратного прокси-сервера и другие) - person Vinko Vrsalovic; 17.09.2008
comment
@VinkoVrsalovic, обычная модель угроз. Предотвратите чтение исходного кода PHP посторонними глазами. - person Pacerier; 03.04.2015