Статьи

Как защитить паролем каталог веб-сайтов PHP в Azure

У меня небольшой перерыв в размышлениях о тестировании приложений PHP в Windows Azure (хотя, в конечном счете, это будет связано с постом о тестировании). В этом посте я покажу один способ , которым вы можете защитить паролем каталог для веб — сайта PHP работает в Windows Azure. Когда я искал способ сделать это, мои поиски нашли подходы, которые включали в себя создание пользователя Windows и предоставление ему соответствующих прав… что казалось более трудоемким, чем я хотел. Затем я нашел этот пост Руслана Якушева : Как защитить WordPress Admin Directory на IIS 7.0, По сути, я следовал этому подходу (но, в общем, не только для WordPress). Единственным препятствием для его работы в Azure было выяснение того, как установить модуль авторизации URL-адресов, который по умолчанию не установлен в IIS в Azure.

Я протестировал приведенные ниже шаги при развертывании пользовательской установки PHP в Azure и при использовании скаффолда по умолчанию, предоставляемого Windows Azure SDK для PHP (который использует установщик веб-платформы для установки PHP).

Примечание : здесь действительно нет ничего специфического для PHP. Одно из предположений, которое я сделал, состоит в том, что у вас есть каталог resources \ WebPICmdLine в вашем корне, который содержит инструменты командной строки Web PI (что имеет место, если вы используете скаффолд по умолчанию или следите за моим постом об упаковке пользовательской установки PHP ). Имея это в виду, вы можете использовать этот подход с любым языком.

1. Загрузитефайл FormsAuthForWordPress.zip из поста Руслана. После того, как вы извлекли файлы, скопируйте и вставьте каталоги App_Data и App_Code ифайл login.aspx в корневой каталог вашего проекта.

2. Отредактируйтефайл users.xml вкаталоге App_Data . Вам нужно будет указать имя пользователя (и его пароль), который будет иметь доступ к защищенному каталогу:

<Users>
  <User>
    <UserName>user_name_here</UserName>
    <Password>password_here</Password>
    <EMail>user_email_here</EMail>
  </User>
</Users>

3. Отредактируйтефайл web.config . Вам нужно добавить (или добавить к ) следующие элементы:

Добавьте это к элементу <system.web> :

<authentication mode="Forms" />
    <membership defaultProvider="AspNetReadOnlyXmlMembershipProvider">
      <providers>
        <add name="AspNetReadOnlyXmlMembershipProvider" type="ReadOnlyXmlMembershipProvider" description="Read-only XML membership provider" xmlFileName="~/App_Data/Users.xml" />
      </providers>
</membership>

Добавьте это к элементу <configuration> (заменив PrivateDir на имя каталога, который вы хотите защитить):

 

<location path="PrivateDir">
    <system.webServer>
        <security>
            <authorization>
                <add accessType="Deny" users="?" />
            </authorization>
        </security>
    </system.webServer>
  </location>

Добавьте это к элементу <system.webserver> :

<modules>
     <remove name="UrlAuthorization" />
     <remove name="FormsAuthentication" />
     <remove name="DefaultAuthentication" />
     <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" preCondition="" />
     <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="" />
     <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="" />
</modules>

4. Добавьте следующий скрипт ( install-urlauthmodule.cmd ) в каталог bin вашего проекта:

@echo off

cd ..\resources\WebPiCmdLine

webpicmdline.exe /Products:URLAuthorization /AcceptEula

5. Отредактируйте файл ServiceDefinition.csdef, чтобы файл install-urlauthmodule.cmd вызывался в качестве задачи запуска. Добавьте следующий элемент в качестве последнего дочернего элемента элемента <Startup> :

<Task commandLine="install-urlauthmodule.cmd" executionContext="elevated" taskType="simple" />

Теперь вы готовы упаковать и развернуть свое приложение. После развертывания, когда вы пытаетесь перейти по адресу http://yoursite.cloudapp.net/PrivateDir , вы должны увидеть этот логин в диалоговом окне:

образ

Если указать имя пользователя / пароль, указанные в файле users.xml, вы перейдете к документу по умолчанию для каталога PrivateDir . Чтобы понять, как это работает, я рекомендую прочесть пост Руслана: Как обезопасить WordPress Admin Directory на IIS 7.0 .

Спасибо.

-Брайан

 

Источник: http://blogs.msdn.com/b/silverlining/archive/2012/01/09/how-to-password-protect-a-php-website-directory-in-azure.aspx