【问题标题】:disable a direct access to a specific web page in ASP.NET禁用对 ASP.NET 中特定网页的直接访问
【发布时间】:2014-06-16 16:07:09
【问题描述】:

是否有可靠的方法来禁用对特殊网页的直接访问?我的意思是我只想通过单击按钮来打开它。我知道我可以使用此代码访问该网页,但它不能阻止直接访问该网页(粘贴 URL 或键入它):

 Response.Redirect("~/Code.aspx")

谢谢

【问题讨论】:

  • 网络本质上是无状态的。因此,解决此问题的一种方法是在用户单击按钮时设置一个标志(将标志存储在 Session 中),然后在 Code.aspx 的 Page_Load 中检查该标志。如果标志不存在,请将它们重定向到不同的页面。如果标志在那里,请将其删除并继续加载。

标签: asp.net vb.net


【解决方案1】:

这是一个很长的尝试,因为我现在没有时间测试它(我可以看到一些反对票已经到来!),但是......

在“Code.aspx”页面中,检查 Session["allowed"]。如果该值不存在,则结束响应。

接下来,制作另一个页面(可以从中访问 Code.aspx)。在此页面中,设置 Session["allowed"] 然后对 Code.aspx 执行 Server.Transfer(),然后运行 ​​OK。

最后,处理完Code.aspx.,记得再次清除Session["allowed"]变量。

希望这甚至有点模糊:)

【讨论】:

  • 我知道,但这两个页面之间有一些页面,如果用户打开第一个页面,那么会话将被保存,他可以轻松访问第二个页面。
  • 检查完会话变量后将其杀死 :) - 将其设置为 null 或无(分别为 C# 和 VB.NET)
  • 我使用了这种方法,但是我的页面之间的页面是来自其他网页的一些 APi 网页。我的意思是如果一个人点击第一个页面,它将被保存,然后他将被定向到 API 网页,并且知道他可以轻松打开第二个页面,因为会话被存储并且它仍然没有被定向到第二个页面。
【解决方案2】:

您可以在页面加载时编写一段代码来检查 HttpContext.Current.Request.ServerVariables("HTTP_REFERER") 的内容 - 如果它是空白的,则用户已直接导航到该页面,您可以这样处理。

【讨论】:

  • 这可以从客户端绕过
【解决方案3】:

在源页面上创建一个标记到隐藏字段中。在您的按钮中添加 PostBackUrl 属性并让它指向您的目标页面。

在目标页面上,您可以验证请求是从您允许的源页面发出的。而且您不需要使用会话及其所有缺点。

查看Link,了解有关如何使用上述属性的详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多