В чем причина "нарушения правил suexec", когда Perl вызывается через серверную часть?

Я работаю над Perl script, который вызывается с сервера на сервере Apache 2. script отображает общую страницу "Ошибка внутреннего сервера", а не показывает фактическую ошибку. Когда я проверяю журнал ошибок 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 script, чтобы показать ошибку, а не "Внутренняя ошибка сервера"?

Обновление:

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

use CGI::Carp qw(fatalsToBrowser);

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

 suexec policy violation: see suexec log for more details

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

Ответ 1

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

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

Ответ 2

Используйте CGI:: Carp fatalsToBrowser.

 use CGI::Carp qw(fatalsToBrowser);

Вы также можете увидеть мой Устранение неполадок с CGI-скриптами Perl.

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

Ответ 3

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

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

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

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

Ответ 4

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

  • Уровень разрешений rwx установлен неправильно (уровень выполнения/уровня писаности)
  • UUID/GUID не соответствуют настройкам Apache
  • Комбинация 2 выше.

Проверьте apache suexec + errorlog для более подробной информации