2013-05-14 2 views
1

У меня сейчас есть система входа, чтобы пользователи, не прошедшие проверку подлинности, не просматривали содержимое моего веб-сайта. Я могу подтвердить работу входа. Проблема, с которой я столкнулась сейчас, однако, связана с моим файлом web.config. Я могу заблокировать не проверенного пользователя от просмотра главной страницы (например, www.mysite.com), которая, в свою очередь, будет загружать index.php. Пользователь, однако, все равно может перейти на www.mysite.com/index.php, не введя в заблуждение, чтобы победить цель входа.Web.Config для блокировки всего веб-сайта

My web.config обрабатывает только главную страницу и любые .aspx-файлы, которые у меня есть в корне. Ниже мой код web.config. Я искал решение какое-то время, и havent нашел способ заставить web.config работать на весь сайт. Кроме того, он находится в корне (и мой сайт использует wordpress).

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
<system.web> 

    <compilation defaultLanguage="c#" debug="false" /> 
    <customErrors mode="Off" /> 
    <authentication mode="Forms"> 
     <forms 
      name=".myCookie" 
      loginUrl="http://www.mysite.com" 
      domain="mysite.com" 
      protection="All" 
      timeout="120" 
      path="/" 
      requireSSL="false" 
      slidingExpiration="true" 
     /> 
    </authentication> 

<authorization> 
      <allow roles="AA,BB" /> 
      <deny users="*" /> 
     </authorization> 

    <machineKey 
     validationKey="xxxxxxx" 
     decryptionKey="xxxxxxx" 
     validation="SHA1" 
    /> 
    <sessionState mode="Off" /> 
</system.web> 

<system.webServer> 
<defaultDocument> 
     <files> 
      <add value="index.php" /> 
     </files> 
    </defaultDocument> 
<rewrite> 
    <rules> 
    <rule name="wordpress" patternSyntax="Wildcard"> 
     <match url="*" /> 
     <conditions> 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="index.php" /> 
    </rule> 
</rules> 
</rewrite> 
</system.webServer> 

</configuration> 

Любая помощь будет оценена, как я потратил довольно много времени на это, и я чувствую, как это должно быть простое решение. Также я запускаю IIS 7.

Чтобы подвести итог моему вопросу, мне нужен файл web.config, чтобы заблокировать доступ ко всем типам файлов (php, .txt и т. Д.), А не только к корневому URL и .aspx файлы.

Спасибо

+0

В качестве обновления. Кажется, меня смутило system.web vs system.webserver. Поскольку я запускаю IIS7, я должен был разместить мои проверки в части веб-сервера в конфиге. – Jingles177

ответ

2

Так как я заметил, что получается, что system.web для IIS6 и System.webServer используется для iis7, и это то, над чем я работал. Мои правила авторизации для system.web были правильными, поэтому любые .net-файлы были заблокированы, как предполагалось, однако из-за интеграции конвейера iis7 любые другие расширения файлов не будут затронуты. Решение этой проблемы я нашел из: http://blogs.msdn.com/b/rakkimk/archive/2007/11/28/iis7-making-forms-authentication-to-work-for-all-the-requests.aspx?Redirected=true

Это имеет отношение к линии Precondition = «»

0

Обычно, если вы не используете «местоположение» безопасности тегов в web.config вступит в силу для всего сайта.

Вот фрагменты из моего; Обратите внимание, что loginURL является конкретной страницы

<authentication mode="Forms"> 
    <forms loginUrl="~/public/Login.aspx" slidingExpiration="true" timeout="45" /> 
</authentication> 
<authorization> 
    <deny users="?"/> 
</authorization> 

? представляет анонимные пользователи На самом деле, чтобы получить CSS для корректной работы вам тогда придется добавить следующее разрешающее все, чтобы получить доступ к этим файлам:

<!-- Allow Anonymous Access to the Themes Folder --> 
<location path="App_Themes" > 
<system.web> 
    <authorization> 
    <allow users="*" /> 
    </authorization> 
</system.web> 
</location> 
+0

Привет, Стив, спасибо за ваш ответ. К сожалению, я не верю, что ваш ответ - это то, что им нужно, или я не уверен, как его реализовать. Например, файл index.php расположен в корне. Если я установил и заблокировал доступ анонимных пользователей к ним, они по-прежнему могут по какой-то причине. – Jingles177

+0

Я бы предложил изменить ваш loginURL на относительный путь на странице входа, это ваша основная проблема, которую я бы заподозрил, и запретить анонимным пользователям со всего сайта. Удалите свои роли, которые вы разрешаете, до тех пор, пока вы не заработаете для тех, кто аутентифицирован. – Steve

+0

Хорошо, я дам это выстрел и сообщение, если это сработает. Я должен был упомянуть ранее, что страница входа не находится на странице Wordpress. Если вы попытаетесь получить доступ к странице Wordpress, она должна перенаправить на другой URL-адрес, где вы можете войти в систему, а затем cookie - это то, что позволяет вам вернуться на страницу Wordpress. – Jingles177