【问题标题】:Dot Net: Not letting user to access web without inserting credentials, even if they change URL?Dot Net:即使用户更改 URL,也不允许用户在不插入凭据的情况下访问网络?
【发布时间】:2016-08-02 00:56:28
【问题描述】:

我有一个系统,用户必须通过登录部分才能访问主页。我可以使用 asp C# Ado 和 SQL 来做到这一点。但问题是安全性。用户仍然可以通过简单地更改 URL 来访问主页而无需输入凭据。当用户打开网站时,URL 将是:

www.domain.co/Login.aspx

如果任何用户将其更改为:

www.domain.co/Home.aspx

他们仍然可以访问它。我不想要这个。谁能指导我如何实现这个功能?

【问题讨论】:

  • 您在使用 Web 表单吗? Asp.Net MVC?
  • 网络表单@hernanat

标签: c# asp.net security login url-redirection


【解决方案1】:

希望大家知道session的用途和优势。你可以利用它。

你想做的是:

  1. 创建一个会话变量(让它成为user_id)如果用户成功登录到站点,则将其值设置为当前用户的id。这意味着 session["user_id"] 如果有任何登录用户,则具有用户 ID。
  2. 您可以在其他页面的加载事件中查看session["user_id"],如果是null,则表示将其淘汰(重定向到登录页面)。

创建会话:

session["user_id"] = "Id of the user"; // This will be the unique identifier 

这将在检查他/她的凭据后添加并且有效。

在主页/或任何其他页面中检查会话:

if(string.IsNullOrEmpty(session["user_id"]))
   Response.Redirect("Login.Aspx");

【讨论】:

  • 是的,我知道如何很好地使用会话。安全吗?
  • 我试过了。它显示此消息:对象引用未设置为对象的实例。
  • 您在检查之前是否已将值分配给会话?试试这个if(session["user_id"]!= null && session["user_id"].ToString()!="")
  • 基本上,我正在从 dataTable 读取用户 ID 并将其初始化为 session["user_id"] 并重定向到主页。我正在检查它是否为空。
  • 这篇文章描述了这个问题:Read this
【解决方案2】:

如果您还没有使用它,您应该了解如何添加表单身份验证:https://support.microsoft.com/en-us/kb/301240

<authentication mode="Forms">
   <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
   protection="All" path="/" timeout="30" />
</authentication>

然后你可以拒绝匿名用户访问所有站点做的事情:

<authorization>
   <deny users ="?" />
   <allow users = "*" />
</authorization>

或特定页面:

<location path="Restricted.aspx">
  <system.web>
    <authorization>
      <deny users ="?" />
    </authorization>
  </system.web>
</location>

【讨论】:

  • 在配置中我添加了授权。现在即使用户名和密码正确也无法进入首页?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多