Проверка подлинности PHP Realm в Windows IIS 7.5

Мне нужно использовать аутентификацию области для папки на сайте PHP, работающей на веб-сервере Windows IIS 7.5. У меня есть следующий код ниже, который прекрасно работает на любом .php файл в этом каталоге.

Проблема в том, что мне нужно защитить паролем доступ к все каталог, включая PDF, файлы изображений, CSS-файлы и т. д. Я не могу разместить код PHP на этих типах файлов.

У меня действительно был установлен модуль перезаписи IIS на сервере, поэтому я предполагаю, что могу каким-то образом добавить перезапись в мой файл web.config, который может принудительно пропустить все файлы через какой-то PHP-файл сквозного / обработчика.

Я просто понятия не имею, как это сделать.

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="Jonas Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'User pressed Cancel';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as you password.</p>";
}
?>

0

Решение

Я ответил на аналогичный вопрос и разница в том, что вы используете ISS, а не Apache, и вы хотите обслуживать все файлы, а не только несколько типов.

Вот полный web.config или вы можете просто скопировать <rule> тег. Это правило будет соответствовать всем файлам, кроме тех, которые php расширение (пожалуйста, не negate=true). Вам придется изменить его в соответствии с вашими конкретными требованиями.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<directoryBrowse enabled="false" />
<rewrite>
<rules>
<rule name="Authentication" stopProcessing="false">
<match url="^(.*)$" negate="false" />
<action type="Rewrite" url="validate.php?path={R:0}" appendQueryString="true" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" />
<add input="{QUERY_STRING}" pattern="^(.*\.php)$" negate="true" />
</conditions>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

А вот другая версия isAuthenticated.php файл, который я использовал, и немного кода, который вы опубликовали.

$blacklistExtensions = array();

$path = $_SERVER["DOCUMENT_ROOT"].DIRECTORY_SEPARATOR.$_REQUEST["path"];
$pathInfo = pathinfo($path);

if(in_array($pathInfo["extension"], $blacklistExtensions)) {
header("HTTP/1.1 403 Forbidden");
exit;
}

if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="Jonas Realm"');
header('HTTP/1.0 401 Unauthorized');
exit;
}

if(!file_exists($path)) {
header("HTTP/1.1 404 Not Found");
exit;
}

// Display the file and set the correct mimetype
$resource = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($resource, $path);
finfo_close($resource);

header("Content-Type: ".$mimetype);
readfile($path);

Надеюсь, что это поможет вам найти решение этой проблемы 🙂

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]