Для приложения ASP.NET С# нам необходимо ограничить доступ на основе IP-адреса. Каков наилучший способ сделать это?
Лучший способ ограничить доступ по IP-адресу?
Ответ 1
В IIS 7 лучший способ ограничить IP - это использовать файл конфигурации.
Полная статья:
http://boseca.blogspot.com/2010/12/programmatically-addremove-ip-security.html
Ответ 2
Один из способов заключается в использовании 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 для вашего веб-приложения.
Ответ 3
Вот статья из Microsoft о том, как это сделать.
Настройка безопасности папки по IP-адресу или доменному имени
Apache использует директивы Allow and Deny для определения сайтов, которые могут обращаться к определенному веб-сайту или папке. Однако Apache обеспечивает дискреционное управление доступом; вы должны либо отклонить все сайты, либо предоставить определенный список сайтов или IP-адресов, которые могут получить доступ к папке или разрешить все сайты и запретить только те сайты, на которые вы не хотите иметь доступ. Например, если вы используете следующую директиву, всем клиентским компьютерам запрещается доступ, если они не признаны частью домена domain.com:
Отклонить от всех
Разрешить с .domain.com
IIS работает одинаково. Все клиенты специально лишены или имеют доступ, за исключением тех, которые перечислены.
Определить контроль доступа для конкретной папки или сайта
- Войдите на компьютер веб-сервера в качестве администратора.
- Нажмите "Пуск", выберите "Настройка", а затем "Панель управления".
- Дважды щелкните значок "Администрирование", а затем дважды щелкните "Менеджер служб Интернета".
-
Если вы хотите ограничить доступ для всего сайта, выберите веб-сайт из списка разных обслуживаемых сайтов в левой панели.
-
Если вы хотите ограничить доступ только для определенной папки, щелкните папку, которую вы хотите контролировать.
- Щелкните правой кнопкой мыши веб-сайт или папку и выберите "Свойства".
- Нажмите панель "Безопасность каталога".
- Если вы хотите ограничить доступ к определенному набору сайтов, но запретите доступ ко всем другим сайтам, нажмите "Запрещенный доступ".
- Если вы хотите предоставить доступ ко всем клиентам по умолчанию, но исключить конкретный список клиентов, нажмите "Разрешенный доступ".
- Чтобы обновить список хостов или доменов в списке "Исключить", нажмите "Добавить".
- Чтобы добавить в список один компьютер, выберите "Один компьютер", введите IP-адрес в соответствующем поле и нажмите "ОК" .
- Чтобы добавить диапазон компьютеров в определенном диапазоне адресов, нажмите "Группа компьютеров", введите IP-адрес для сети в соответствующем поле, введите маску подсети для сетевого диапазона, который вы хотите настроить, и нажмите "ОК" .
- Чтобы добавить компьютеры по их идентифицированному доменному имени, нажмите "Имя домена", а затем введите имя домена в соответствующем поле.
- Нажмите "Свойства", введите имя домена и нажмите "ОК" .
- Нажмите "ОК" , а затем "ОК" .
ПРИМЕЧАНИЕ. Если вы используете ограничения имени домена, сервер должен выполнить обратный поиск DNS для каждого запроса, чтобы проверить зарегистрированное доменное имя хоста. Корпорация Майкрософт рекомендует, когда вы можете использовать IP-адрес или сетевой диапазон.