2010-02-25 2 views
16

У меня есть страница в приложении ASP.Net (ее Mvc на самом деле, но не важно), и я хотел бы разрешать только подключения к этой странице с локальной машины. Я хотел бы сделать что-то подобное в Web.config:Возможно ли настроить местоположение в Web.config только для локальных подключений

<location path="resources"><system.web><authorization><allow ips="local"/></authorization></system.web></location> 

Я знаю, что это возможно с помощью простой проверки в коде страницы позади (или контроллер) и its even possible just with IIS configuration, но я люблю Web.config конфиг как это было бы самым элегантным решением, на мой взгляд. Кто-нибудь знает, возможно ли это?

Благодаря

Guido

+0

Являются ли ваши пользователи в домене Windows? Если это так, вы можете ограничить доступ только к пользователям домена. Это будет очень похоже на ответ @ lance. – jrummell

+0

Примечание: это невозможно, все решения требуют написания кода (нет доступного решения) – gatapia

ответ

4

Это не то, что вы просили, но вы можете указать пользователей из   локальной машине. Я не могу себе представить, что это практично, если только небольшое количество пользователей, которых вы хотите разрешить.

<location path="resources"> 
    <system.web> 
    <authorization> 
     <allow users="LOCALMACHINENAME\UsernameOfTrustedUser"/> 
     <deny users="*"/> 
    </authorization> 
    </system.web> 
</location> 
+0

Привет, Lance. Это не поможет пользователю IIS, который будет периодически запускать эту страницу, и я в настоящее время не являюсь «олицетворением», поэтому все пользователи будут пользователем IIS. – gatapia

+0

Вы попробовали это предложение? Он должен работать. Использование «Олицетворения» здесь не относится к примеру аутентификации. –

0

Вы можете создать свой собственный раздел конфигурации, который будет частью вашей web.config, а затем использовать параметр для управления поведением в global.asax session_start.

2
  1. Придумайте псевдоним, отличный от DNS, для машины, то есть «PrivateHostName».
  2. Установите это значение в файле локальных хостов, чтобы указать 127.0.0.1.
  3. Установите заголовок узла (IIS) для веб-сайта таким образом, чтобы он отвечал только на запросы адреса «PrivateHostName».
  4. Для всех локальных вызовов используйте имя частного хоста.

Удаленные клиенты не смогут решить имя хоста.

Вы можете защитить его больше, используя выделенный IP-адрес, привязанный к виртуальному сетевому адаптеру, который фактически не реагирует на внешние запросы.

+5

Небезопасное решение. Хакер может добавить этот псевдоним в свой файл локальных хостов и получить доступ к веб-сайту. – meir

25

Вы можете задать IIS, чтобы ограничить доступ к ресурсу по IP-адресу внутри Web.config:

<location path="resources"> 
    <system.webServer> 
    <security> 
     <ipSecurity allowUnlisted="false"> 
     <clear/> 
     <add ipAddress="127.0.0.1"/> 
     </ipSecurity> 
    </security> 
    </system.webServer> 
</location> 

More info

EDIT: Как Майк указал на это в комментарии ниже, это требует модуль IP и доменных ограничений, который будет установлен. Спасибо, Майк!

+7

Спасибо за ответ. Начнем с того, что это не сработало для меня - настройка, по-видимому, игнорировалась IIS. Наконец, я решил, что в Windows 7 модуль по умолчанию для IP и домена не установлен по умолчанию. Чтобы заставить его работать, мне нужно было сделать «Панель управления»> «Программы и функции»> Включить или отключить функции Windows> «Информационные службы Интернета»> «Услуги глобальной сети»> «Безопасность» и отметьте «Безопасность IP». –

+0

Это, кажется, отлично работает, но знаете ли вы, как изменить вывод страницы? Я получаю код состояния 200, и страница читает: «Доступ с пульта не разрешен (2)». – Redtopia

+0

@ Редтопия: вы можете добавить страницу ошибки 403. В Web.config вам потребуется: <удалить StatusCode = "403" subStatusCode = "- 1" /> <ошибка StatusCode = "403" prefixLanguageFilePath = "" путь = "/ путь /to/errorpage.aspx "responseMode =" ExecuteURL "/> Daniel

1

Я нашел это полезным, если вы хотите указать диапазон IP-адресов. Вы можете добавить следующий кодовый блок к вам. Webcconfig

<system.webServer> 
    <security> 
     <ipSecurity allowUnlisted="false"> 
      <clear/> 
      <add ipAddress="95.110.115.0" subnetMask="255.255.255.0"/> 
      <!--blocks range 95.110.115.0 to 95.110.115.255-->  
      <add ipAddress="95.110.0.0" subnetMask="255.255.0.0"/>  
      <!--blocks range 95.110.0.0 to 95.110.255.255-->  
      <add ipAddress="95.0.0.0" subnetMask="255.0.0.0"/>   
      <!--blocks range 95.0.0.0 to 95.255.255.255--> 
     </ipSecurity> 
    </security> 
</system.webServer> 
Смежные вопросы