Обход форм проверки подлинности при передаче строки запроса - PullRequest
5 голосов
/ 19 января 2010

В ASP.Net кто-нибудь знает способ обхода проверки подлинности с помощью форм, если в него передан определенный параметр строки запроса?

Например:

mydomain.com/myprotectedpage.aspx

... Iхотел бы быть защищенным с помощью проверки подлинности с помощью форм (и, таким образом, перенаправленным на страницу входа)

mydomain.com/myprotectedpage.aspx?myBypassParameter=me

... Я хотел бы, чтобы страница отображалась как обычно

Возможно ли это вообще?

Ответы [ 3 ]

2 голосов
/ 19 января 2010

На самом деле нет никакого "официального" способа сделать это.

Вы можете сделать то, что я делаю, это создать базовую страницу вместо system.web.ui.page, например:

Public MustInherit Class ProtectedPage
Inherits System.Web.UI.Page

Private Sub Page_InitComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.InitComplete
    If User.Identity.IsAuthenticated = False Then
        If String.IsNullOrEmpty(Request.QueryString("myBypassParameter")) Then
            FormsAuthentication.RedirectToLoginPage()
        End If
    End If
End Sub

Конечный класс

0 голосов
/ 19 января 2010

Возможно, вы сможете вставить какой-нибудь быстрый код в событие Application_AuthenticateRequest. Затем вы можете проверить параметр и настроить User.Identity по мере необходимости, чтобы разрешить страницу. Вам также нужно будет проверить страницу, чтобы убедиться, что она не допускает такое поведение на всех запрещенных страницах.

Я бы не рекомендовал этот дизайн как подход. Если вам нужна защищенная область, доступ к которой осуществляется анонимно, было бы лучше поместить все ваши функции в UserControl, а затем использовать защищенную / незащищенную версию родительской страницы. Это позволит вам контролировать то, что выходит и когда.

0 голосов
/ 19 января 2010

В своем коде вы можете просто использовать Request.QueryString["myBypassParameter"] и проверить его значение. Если это недопустимое значение, используйте FormsAuthentication.RedirectToLoginPage или пользовательское перенаправление, чтобы вернуть пользователя на страницу входа. Однако , это не похоже на безопасный способ защиты страницы. Что если кто-то заполучит определенный параметр и получит доступ к вашей защищенной странице? Кроме того, вы хотите убедиться, что значение QueryString допустимо (возможно, с помощью регулярного выражения), чтобы гарантировать, что пользователь не передал вредоносный код, который затем будет прочитан вашим приложением.

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