PHP Realm Authentication на 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>";
}
?>

person TroySteven    schedule 26.10.2015    source източник


Отговори (1)


Отговорих на подобен въпрос и разликата е, че вие ​​сте като използвате 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);

Надяваме се, че това може да ви накара да започнете да намирате решение на този проблем :)

person Ricardo Velhote    schedule 09.11.2015