Лучший способ ограничить доступ по IP-адресу?

Для приложения ASP.NET C# нам потребуется ограничить доступ на основе IP-адреса. Как лучше всего этого добиться?

На аналогичный вопрос был ответ, который вы ищете ... stackoverflow.com/a/6108168/80161

Nathan Hartley 20.01.2012 06:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
19
1
30 734
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вот статья из Microsoft о том, как это сделать.


Настройка безопасности папки по IP-адресу или доменному имени

Apache использует директивы Allow и Deny для определения сайтов, которые могут получить доступ к определенному веб-сайту или папке. Однако Apache обеспечивает дискреционный контроль доступа; вы должны либо запретить все сайты и предоставить определенный список сайтов или IP-адресов, которые могут получить доступ к папке, либо разрешить все сайты и запретить только те сайты, к которым вы не хотите иметь доступ. Например, если вы используете следующую директиву, всем клиентским компьютерам будет отказано в доступе, если они не распознаются как часть домена domain.com:

Запретить всем
Разрешить с .domain.com

IIS работает точно так же. Всем клиентам явно запрещен или предоставлен доступ, за исключением перечисленных.

Определить контроль доступа для конкретной папки или сайта

  • Войдите на компьютер веб-сервера как администратор.
  • Нажмите «Пуск», наведите указатель на «Настройка» и нажмите «Панель управления».
  • Дважды щелкните «Администрирование», а затем дважды щелкните «Диспетчер служб Интернета».
  • Если вы хотите ограничить доступ для всего сайта, выберите этот веб-сайт из списка различных обслуживаемых сайтов на левой панели.

  • Если вы хотите ограничить доступ только для определенной папки, щелкните папку, которой вы хотите управлять.

  • Щелкните правой кнопкой мыши веб-сайт или папку и выберите «Свойства».
  • Щелкните панель Безопасность каталога.
  • Если вы хотите ограничить доступ к определенному набору сайтов, но запретить доступ ко всем остальным сайтам, щелкните Запрещенный доступ.
  • Если вы хотите предоставить доступ всем клиентам по умолчанию, но исключить определенный список клиентов, щелкните «Разрешенный доступ».
  • Чтобы обновить список хостов или доменов в списке «Исключение», нажмите «Добавить».
  • Чтобы добавить в список отдельный компьютер, щелкните «Один компьютер», введите IP-адрес в соответствующее поле и нажмите «ОК».
  • Чтобы добавить диапазон компьютеров в определенный диапазон адресов, щелкните «Группа компьютеров», введите IP-адрес сети в соответствующее поле, введите маску подсети для диапазона сети, который вы хотите настроить, а затем нажмите «ОК».
  • Чтобы добавить компьютеры по их определенному доменному имени, щелкните Доменное имя, а затем введите доменное имя в соответствующее поле.
  • Щелкните «Свойства», введите имя домена и нажмите кнопку «ОК».
  • Щелкните ОК, а затем щелкните ОК.

ПРИМЕЧАНИЕ: Если вы используете ограничения доменного имени, сервер должен выполнять обратный поиск DNS для каждого запроса, чтобы проверить зарегистрированное доменное имя хоста. Microsoft рекомендует по возможности использовать IP-адрес или диапазон сети.

Это удобно и легко, если у вас есть небольшой список статических адресов, которые нужно заблокировать или разрешить. Если вам нужно что-то программное, попробуйте ответ @Mitch Wheat. +1

Michael Haren 10.01.2009 17:33

этот метод также позволяет добавлять диапазоны IP-адресов, что тоже хорошо.

Tom Anderson 10.01.2009 17:35

Я бы не стал добавлять «разрешить все с domain.com», так как это вызывает поиск IP для каждого запроса. Лучше было бы использовать определенный диапазон IP.

NickG 29.01.2015 13:48

Один из способов - использовать HttpModule.

По ссылке (на случай, если она когда-нибудь исчезнет):

/// <summary>
/// HTTP module to restrict access by IP address
/// </summary>

public class SecurityHttpModule : IHttpModule
{
 public SecurityHttpModule() { }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(Application_BeginRequest);
    }

    private void Application_BeginRequest(object source, EventArgs e)
    {
        HttpContext context = ((HttpApplication)source).Context;
        string ipAddress = context.Request.UserHostAddress;
        if (!IsValidIpAddress(ipAddress))
        {
            context.Response.StatusCode = 403;  // (Forbidden)

        }
    }

    private bool IsValidIpAddress(string ipAddress)
    {
        return (ipAddress == "127.0.0.1");
    }

    public void Dispose() { /* clean up */ }
}

После создания класса модуля HTTP вам необходимо зарегистрировать его в разделе httpModules файла web.config, например:

<configuration>
    <system.web>
        <httpModules>
            <add name = "SecurityHttpModule" type = "SecurityHttpModule"/>
        </httpModules>
    </system.web>
</configuration>

Это добавляет модуль в конвейер запросов ASP.NET для вашего веб-приложения.

Это хороший подход, особенно если вы добавите обработчик раздела конфигурации для разрешенных IP-адресов.

Tom Anderson 10.01.2009 17:37

как насчет диапазонов ip?

zerohero 10.05.2017 17:40

Написанный вами синтаксис web.config подходит для IIS6 / Cassini. Для IIS 7 и выше он должен находиться в <system.webServer> вместо <system.web> и <modules> вместо <httpModules>.

BornToCode 11.09.2017 04:10
Ответ принят как подходящий

В IIS 7 лучший способ ограничить IP-адрес - использовать файл конфигурации.

Полная статья:
http://boseca.blogspot.com/2010/12/programmatically-addremove-ip-security.html

Другие вопросы по теме