C# 如何保护网页

C# 如何保护网页,c#,asp.net,security,protection,C#,Asp.net,Security,Protection,在本地主机上运行的网页,如果我复制网页链接(地址链接),然后复制到另一个选项卡或浏览器,它不应该打开,它应该显示一个登录页 例如,网页是 Login.aspx Account.aspx 登录后,帐户页面将打开,然后复制地址链接,然后尝试在其他选项卡或浏览器中打开。它直接显示帐户页面 没有登录页面不应直接打开帐户页面 if (Request.UrlReferrer == null || !Request.UrlReferrer.LocalPath.Equals("/website1/accoun

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

例如,网页是

Login.aspx
Account.aspx
登录后,帐户页面将打开,然后复制地址链接,然后尝试在其他选项卡或浏览器中打开。它直接显示帐户页面

没有登录页面不应直接打开帐户页面

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


需要一些例子。

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

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

如果在用户未登录时访问了
Account.aspx
,则重定向到
Login.aspx
如何

大多数网站都是这样运作的


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

如果在用户未登录时访问了
Account.aspx
,那么重定向到
Login.aspx如何

大多数网站都是这样运作的


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

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

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

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


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

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

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

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


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

要执行您想要执行的操作,您需要了解浏览器中的取消选项卡的工作方式。 通常,它们共享cookies和会话状态,这就是为什么当您在网站上有会话时,如果您单击链接或打开新窗口,会话将继续在那里(这就是为什么您会遇到一些安全问题)

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

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

一种奇怪的方法是用相框。 在基本页面(包含框架的页面)上,您可以将会话存储在一些javascript中。 然后所有页面检查是否有顶部页面,以及是否有有效的会话。 当您打开一个新选项卡并复制链接时,框架页面将是干净的,因此您需要一个新的登录名。
我不知道像这样做是否还有其他安全问题

要做你想做的事情,你需要了解浏览器中的de-tabs是如何工作的。 通常,它们共享cookies和会话状态,这就是为什么当您在网站上有会话时,如果您单击链接或打开新窗口,会话将继续在那里(这就是为什么您会遇到一些安全问题)

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

所以,若你们真的需要这样做,那个么你们需要在你们的页面上有一些独特的、不被共享的东西。 您可以在选择的每个链接上都传递一个隐藏字段。但这意味着在管理页面时需要做大量工作。这会带来其他安全问题(例如,如果有人发送链接,会话也会:-(

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

会话在选项卡和窗口之间共享。它不会在不同的浏览器(例如IE和Firefox)之间共享

我不清楚为什么需要在各个选项卡之间保持变量分离

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

if (Request.UrlReferrer == null || !Request.UrlReferrer.LocalPath.Equals("/website1/account/login.aspx",StringComparison.OrdinalIgnoreCase))
{
    Response.Redirect("/website1/account/login.aspx");
}
但是,最好重新考虑一下你为什么要这样做。也许有更好的方法来实现你的目标。

Sessi