Что вызывает «нарушение политики suexec», когда Perl вызывается через серверную часть include? - PullRequest
11 голосов
/ 09 января 2010

Я работаю над сценарием Perl, который вызывается со стороны сервера на сервере Apache 2. Сценарий отображает общую страницу «Внутренняя ошибка сервера», а не показывает фактическую ошибку. Когда я проверяю журнал ошибок Apache, я вижу эти сообщения:

unable to include "/foobar/index.pl" in parsed file /home/foouser/domains/foosite.com/public_html/foobar/index.shtml, referer: http://www.foosite.com/foobar/
suexec policy violation: see suexec log for more details, referer: http://www.foosite.com/foobar/
Premature end of script headers: settings.pl, referer: http://www.foosite.com/foobar/

Как получить Perl-скрипт для отображения ошибки, а не "Внутренняя ошибка сервера"?

Обновление:

Я должен был задать отдельный вопрос для этого, потому что с тех пор я узнал, что этот посылает ошибки в браузер ( спасибо Брайану ):

use CGI::Carp qw(fatalsToBrowser);

Однако, если проблема связана с настройкой Apache, а не со скриптом Perl, ошибка не будет отправлена ​​в браузер, поскольку код Perl не интерпретируется. В этом случае мы можем сказать, что я испытываю ошибку Apache (а не ошибку Perl) из-за этой строки:

 suexec policy violation: see suexec log for more details

Это происходит, когда Apache работает в режиме SUexec (что, как правило, является общим для общего хостинга). Я не уверен, что именно было изменено, чтобы вызвать эту ошибку, но это то, что я пытаюсь выяснить.

Ответы [ 4 ]

16 голосов
/ 09 января 2010

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

Вот один кейс в переводе с голландского.

6 голосов
/ 09 января 2010

Использование CGI :: Carp s fatalsToBrowser.

 use CGI::Carp qw(fatalsToBrowser);

Возможно, вы также захотите увидеть мои Устранение неполадок сценариев Perl CGI .

Из сообщения об ошибке я предполагаю, что вы не можете выполнять CGI-сценарии со стороны сервера. Какую версию вашего Apache вы используете? Если это старый apache, см. документы suexec для apache 1.3 , или если это более новый apache, см. документы suexec для apache 2.0 .

2 голосов
/ 09 января 2010

Это не для удобства пользователя, но часто для безопасности, что мы не показываем пользователям точную ошибку, когда пользователь ничего не может с этим поделать. Например, представьте, что внутренний сервер недоступен. Что я, как пользователь, могу сделать, чтобы исправить это в вашем веб-приложении?

В некоторых случаях сообщения об ошибках будут содержать полезную информацию, например «Ошибка SQL: недопустимый синтаксис. Несоответствие». Если бы пользователь вводил цитату в своем вводе, эта обратная связь указала бы на уязвимость внедрения SQL.

Другие доброжелательно выглядящие сообщения также плохо показываются пользователям. Главное, что хочет злоумышленник, это знать, что «произошло что-то другое». Если приложение выводит одну ошибку для одного ввода и другую ошибку для другого ввода-вывода, то злоумышленник знает, что что-то другое пошло не так и что это интересное место для фокусировки.

На рабочем сайте ошибки должны регистрироваться в файле и, при необходимости, загружаться через ваш веб-интерфейс, но будьте очень осторожны, чтобы санировать любой вывод в браузер, чтобы избежать межсайтового скриптинга. И не должно быть никакой пользовательской опции для перенастройки этого между отладкой и производством (не управляйте этим с помощью параметра POST или CGI, а с помощью параметра файла конфигурации).

0 голосов
/ 12 августа 2017

Это может быть 3 фактора:

  1. Неправильно задан уровень разрешений rwx (уровень выполнения / записи)
  2. UUID / GUID не соответствуют настройкам Apache
  3. Сочетание 2 выше.

Подробности смотрите в apache suexec + errorlog

...