Удалить заголовок WWW-Authenticate

У меня есть страница на моем apache, которую я защищаю с помощью Basic Auth.

С помощью JavaScript я хочу проверить, есть ли в браузере учетные данные для этой страницы или нет, поэтому я хочу загрузить страницу с помощью jQuery. ajax звоните, надеясь получить либо страницу, либо 401 ошибка. К сожалению, браузер всегда запрашивает у меня учетные данные в последнем случае, который я не хочу - я просто хочу знать, нужны ли мне учетные данные или нет!

Я читал, что браузер только спрашивает, WWW-Authenticate: заголовок установлен, поэтому я хочу его отключить или отредактировать, чтобы браузер не знал об этом.

Это мое .htaccess (строка редактирования взята с coderwall.com):

Authtype Basic
AuthName "abcdef"
AuthUserFile some/folder/at/the/xampp/.htpasswd
Require valid-user

Header always add HelloHello "Blupp"
Header always edit WWW-Authenticate ^Basic SR_Basic

Это (частично) то, что я получаю с curl -I <url>:

HTTP/1.1 401 Unauthorized
Date: Thu, 14 Sep 2017 12:48:52 GMT
Server: Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.6.21
WWW-Authenticate: Basic realm="abcdef"
Vary: accept-language,accept-charset
Accept-Ranges: bytes
Content-Type: text/html; charset=utf-8
Content-Language: en

Вы видите, WWW-Authenticate заголовок не изменяется, а HelloHello заголовок не был применен! Когда я закомментирую первые 4 строки (базовая аутентификация), я правильно получаю HelloHello: Blupp,

Используя линию Header always unset WWW-Authenticate вместо этого не приносит никаких изменений.

Как я могу изменить / подавить заголовок?

1 ответ

Проблема здесь в том, что модули Apache загружаются и обрабатываются.

Вы можете увидеть порядок модулей, запустив эту команду:

apache2ctl -M

Вы увидите, что модуль auth_*_ загружается до модуля headers_module, поэтому вы не можете добавлять заголовки или изменять существующие.

Загруженные модули:
...
...
 auth_basic_module (общий доступ)
 auth_digest_module (общий доступ)
 authn_core_module (общий доступ)
 authn_file_module (общий доступ)
 authz_core_module (общий доступ)
 authz_groupfile_module (общий доступ)
 authz_host_module (общий доступ)
 authz_user_module (общий доступ)......
 headers_module (общий доступ)......

При просмотре документации Apache порядок загрузки модулей определяется в собственном исходном коде модуля.

Я проследил, что Apache 2.4.25 (как в Debian 9 "stretch") добавляет заголовок "WWW-Authenticate" в mod_auth_basic.c (в r->err_headers_out) и затем обрабатывает директиву конфигурации Apache "Header" в mod_headers.c, которая к сожалению, работает с другой копией r-> err_headers_out в mod_headers.c:ap_headers_error_filter().

При добавлении второй функции do_headers_fixup() в ap_headers_error_filter (), как это делается в ap_headers_output_filter() для работы с r->headers_out, проблема также исчезла.

Не уверен, что Apache считает эту проблему ошибкой или функцией.

Обновление: Соответствующий отчет о проблеме на apache.org, включая предложенный патч, находится по адресу: https://bz.apache.org/bugzilla/show_bug.cgi?id=62025

Другие вопросы по тегам