我的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
转到它,但是不让我处理按钮点击?
答案 0 :(得分:1)
如果您在执行Server时检查浏览器地址栏。转移URL不会更改 - 这是因为它停止处理当前页面并开始处理新页面而浏览器不知道它。因此,它会绕过身份验证,直到您回发,即按钮单击,此时它会将您发送回登录。
你应该做的是一个Response.Redirect,它将改变URL,并且验证将正确发生。
答案 1 :(得分:0)
这是因为Server.Transfer将当前请求的处理转移到其他页面。检查后是否有权访问所请求的页面。即当使用Server.Transfer时,请求是针对您有权访问的页面,但是您通过将该页面的处理传递给您无权访问的页面来规避安全性。
答案 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文件的未经身份验证的用户可以使用“注册”页面更改您的大纲。