Проверка IP с использованием проверки подлинности с помощью ASP.NET Forms - PullRequest
1 голос
/ 22 июля 2009

Я внедряю простую аутентификацию на веб-сайте asp.net. Использование базовых форм аутентификации практически идеально: я установил режим авторизации Forms и у меня есть короткий раздел с учетными данными в web.config, и я использую простую страницу входа aspx, которая использует FormsAuthentication.Authenticate () и FormsAuthentication.RedirectFromLoginPage ().

Однако я хотел бы добавить дополнительную проверку для определенных клиентских IP-адресов. Если запрос приходит с определенного IP-адреса, я хочу автоматически авторизовать запрос, а не перенаправлять его на страницу входа. Есть ли простой способ расширить или переопределить встроенные формы AuthenticateRequest? Другой мой вариант - создать собственный HttpModule для этого, но, кажется, если я потеряю хорошую функциональность методов FormsAuthentication и их взаимодействие с разделом учетных данных. Есть предложения?

Ответы [ 3 ]

4 голосов
/ 22 июля 2009

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

Во-вторых, вы можете просто проверить IP-адрес на странице входа в систему и перенаправить оттуда ... нет необходимости в HttpModule. Но, опять же, я бы НЕ сделал этого на твоем месте.

ОБНОВЛЕНИЕ: R G - пара вещей. Я думал, что вы сделаете вызов Authenticate () перед перенаправлением. Это позволит избежать повторного выполнения цикла перенаправления. Но, похоже, тебе это даже не нужно, потому что ...

Во-вторых, из вашего комментария ниже (в посте Бена) вы будете использовать этот код в веб-сервисе. Если это так, не могли бы вы разместить веб-сервис на странице Web.Config в качестве страницы разрешенного доступа? Просто добавьте это:

<location path="YourWebService.asmx">
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</location>

Это то, что мы делаем, хотя мы требуем, чтобы пользователи нашего веб-сервиса отправляли «волшебную фразу» до того, как мы обработаем запрос веб-сервиса (он также зашифрован SSL).

0 голосов
/ 22 июля 2009

Переменная сервера REMOTE_ADDR даст IP-адрес запрашивающей стороны, и вы можете проверить ее снова в списке разрешенных адресов.

http://msdn.microsoft.com/en-us/library/ms524602.aspx

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

0 голосов
/ 22 июля 2009

Я согласен с Марком.

Если вы хотите, чтобы клиенты очень легко могли подключиться к вашему сайту после первой проверки их учетных данных (правильно), вы можете предоставить им постоянный постоянный cookie-файл, изменив web.config:

<system.web>
    ...
    <authentication mode="Forms">
      <forms timeout="50000000" />
    </authentication>
    ...
</system.web>

Также вызовите RedirectFromLoginPage () с createPersistentCookie , установленным в true .

РЕДАКТИРОВАНИЕ Предостережение: если вы сделаете это (или даже дадите постоянные файлы cookie любой продолжительности), также дайте пользователям возможность отказаться от постоянного файла cookie с помощью флажка какого-либо типа. (Лучше всего, если он работает в обратном порядке: они должны проверить его, чтобы получить постоянный файл cookie, озаглавленный «нажмите эту кнопку, чтобы запомнить меня на этом компьютере» или подобное.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...