如何保护网页

时间:2010-08-08 10:04:17

标签: c# asp.net security protection

在localhost上运行的网页,如果我复制网页链接(地址链接),然后复制到另一个选项卡或浏览器,它不应该打开,它应该显示一个登录页面。

例如,网页

Login.aspx
Account.aspx

登录后,帐户页面将打开,然后复制地址链接,然后尝试在另一个标签页或浏览器中打开。它是直接显示帐户页面。

如果没有登录页面,则不能直接打开帐户页面。

如何保护网页。

需要一些例子。

8 个答案:

答案 0 :(得分:1)

你可以做到这一点。应将加载和卸载事件设置为会话。根据状态,您可以决定显示登录页面或请求的页面。可以通过AJAX进行会话设置。

答案 1 :(得分:1)

要做你想做的事,你需要了解浏览器中de tab的工作原理。 通常他们会共享cookie和会话状态,这就是为什么当你在网站上进行会话时,如果你点击一个链接,或者打开一个新窗口,会话就会继续(这就是为什么你有一些安全问题)

要解决您的问题,您需要以其他方式保持会话... 而且我不容易......

因此,如果你真的需要这样做,那么你需要在你的页面上有一些不共享的东西。 您可以在您选择的每个链接上传递一个隐藏字段。但这意味着在管理您的网页方面需要做很多工作。它会带来其他安全问题(比如有人发送链接而不是会话也是如此: - (

你能做到的一个奇怪的方法是拥有框架。 在基页(包含框架的页面)上,您将会话存储在某些javascript中。 然后所有页面检查是否有首页,以及它是否有有效会话。 当您打开新选项卡并复制链接时,框架页面将是干净的,因此您需要新的登录。 我不知道是否有任何其他的安全问题需要这样做

答案 2 :(得分:1)

会话在标签页和窗口之间共享。它不是在不同浏览器(例如IE和Firefox)之间共享。

我不清楚为什么你需要在变量标签之间分开变量。

我想如果你愿意,你可以将一些值从一个页面发布到另一个页面。在Page_Load中,如果不是isPostback,则将该值存储在ViewState中。如果未收到该值,则重定向到登录页面。

但是,最好重新考虑一下为什么要这样做。可能有更好的方法来实现您的目标。

答案 3 :(得分:1)

如果我理解正确,我相信它是网络浏览器的默认行为。在gmail,hotmail或任何其他提供登录/注销会话的Web应用程序的情况下也是如此。登录Gmail,打开您的联系人页面,然后将联系人页面网址复制并粘贴到另一个浏览器选项卡中,您将看到相同的联系人页面,而不会被要求登录页面。

article可能会帮助您理解;并提供一种解决方法。

  

对会话合并的正确支持很重要,因为大多数Web应用程序都是为了期望而编写的。例如,当Web应用程序打开一个弹出窗口时,它通常会这样做,期望弹出窗口将与主窗口共享cookie,这样用户将保持登录状态并且他们的首选项将保持可用,等等。当用户使用“复制选项卡”命令时,他们合理地期望新选项卡向他们显示与原始选项卡相同的内容 - 共享cookie对于该场景正常工作至关重要。

答案 4 :(得分:1)

这会奏效。将其存储在Context.Items中并将请求传输到另一页。

//In Login.aspx
Context.Items["userName"] = myValue;
Server.Transfer("Account.aspx");

//In Account.aspx
protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostback)
   {
      if (UserName == null)
      {
         UserName == Context.Items["userName"];
      }
      if (UserName == null)
      {
         Server.Transfer("Login.aspx");
      }
   }
}

    private String UserName
    {
        get
        {
            if (ViewState["UserName"] != null)
            {
                return ViewState["UserName"].ToString();
            }
            else
            {
                return null;
            }
        }
        set
        {
            ViewState["UserName"] = value;
        }
    }

同样,我不明白为什么你不希望页面在另一个标签中工作。但这对你有用。

答案 5 :(得分:0)

如果在用户未登录时访问Login.aspx,重定向到Account.aspx怎么样?

这就是大多数网站的运作方式。

您可以在Account.aspx中查看会话状态,然后相应地重定向到Login.aspx

答案 6 :(得分:0)

这不是设计页面的好方法。 Http是无状态的,这意味着保持用户登录的典型方法是使用带有一些随机会话字符串的cookie。每个请求都会发送此字符串,服务器将检查该字符串是否与会话相关联。

现在 - 这里的问题是这个会话字符串是由用户浏览器管理的,它运行的是纯粹的客户端。您可以让浏览器“忘记”不同标签中的字符串,但它很复杂且很奇怪。

如果这是某种安全问题,请不要这样做! :)永远不要相信客户端逻辑,以保证您的网站更安全..

[编辑]我假设您的意思是用户在第一个标签中登录,之后没有注销?

答案 7 :(得分:0)

如果引荐来源为空或不是登录页面,则重定向。

if (Request.UrlReferrer == null || !Request.UrlReferrer.LocalPath.Equals("/website1/account/login.aspx",StringComparison.OrdinalIgnoreCase))
{
    Response.Redirect("/website1/account/login.aspx");
}