ASP.NET奇怪的行为

时间:2012-07-06 10:21:42

标签: asp.net webforms forms-authentication

我的Register页面仅供经过身份验证的用户使用,因此任何键入http://localhost:52874/register.aspx的人都无法访问该页面。

但我在登录页面上有一个指向该链接的链接,点击后DOES使用Server.Transfer("Register.aspx", false);

进入注册页面而不进行身份验证

现在这是我喜欢的东西,这意味着它只能从Login.aspx页面获得,这很好。

但是,当我按下注册页面上的Submit按钮(从login.aspx转移后)时,它会立即返回login.aspx而不进行任何处理。

然后我必须补充:

  <location path="Register.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
  </location>

到Web配置以允许它工作,这意味着它现在可以通过url访问。那么为什么会出现这种情况,为什么允许我使用Server.Tranfer转到它,但是不让我处理按钮点击?

4 个答案:

答案 0 :(得分:1)

如果您在执行Server时检查浏览器地址栏。转移URL不会更改 - 这是因为它停止处理当前页面并开始处理新页面而浏览器不知道它。因此,它会绕过身份验证,直到您回发,即按钮单击,此时它会将您发送回登录。

你应该做的是一个Response.Redirect,它将改变URL,并且验证将正确发生。

答案 1 :(得分:0)

这是因为Server.Transfer将当前请求的处理转移到其他页面。检查后是否有权访问所请求的页面。即当使用Server.Transfer时,请求是针对您有权访问的页面,但是您通过将该页面的处理传递给您无权访问的页面来规避安全性。

查看Server.Transfer Vs. Response.Redirect

答案 2 :(得分:0)

http://www.4guysfromrolla.com/articles/120705-1.aspx - 查看有关会员提供商的文章。它可能会有所帮助:)

如果您只是让用户在登录后访问该页面,您可能需要拒绝user =“?”这将拒绝匿名用户访问该页面。

答案 3 :(得分:0)

来自MSDN

  

ASP.NET不验证当前用户是否有权查看   Transfer方法提供的资源。虽然是ASP.NET   授权和认证逻辑在原始版本之前运行   调用资源处理程序,ASP.NET直接调用处理程序   由Transfer方法指示,不会重新运行身份验证和   新资源的授权逻辑。如果你的应用程序   安全策略要求客户具有适当的授权   访问资源时,应用程序应强制重新授权或   提供自定义访问控制机制。

因此,设计Server.Transfer("Register.aspx", false);未在您的方案中进行身份验证。

我认为任何人都应该能够看到注册页面 - 用户应该能够通过URL到达那里。因此,请确保使用web.config文件的未经身份验证的用户可以使用“注册”页面更改您的大纲。