2015-10-26 6 views
0

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

Проблема заключается в том, что мне необходимо защитить паролем доступ к всей директории, включая 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>"; 
} 
?> 

ответ

1

Я ответил на similar question и разница в том, что вы используете МКС, а не 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); 

Надеется, что это может получить вы начали в поиске решения по этому вопросу :)

 Смежные вопросы

  • Нет связанных вопросов^_^