【问题标题】:Restrict URL to specific database username ASP.NET将 URL 限制为特定数据库用户名 ASP.NET
【发布时间】:2021-06-11 13:22:08
【问题描述】:

我正在使用 ASP.NET Framework 制作一个网站工具 isch,它可以让用户/客户预览他们的网站。

我有一个简单的数据库,它收集 SESSION["username"] 并创建一个包含客户项目文件源的文件。

但是,如果我有多个用户,我应该如何阻止用户使用 URL 访问彼此的文件?就像客户项目的目录是? "~/Customer/SESSION["username"]/Default.aspx 和 user1 在目录中输入 user2。为了便于理解,我将部分内容贴在这里。

我的项目目录

在 Default.aspx 页面中,我指导所有不是用户“admin”的人。在 Default.aspx 内部,我有一个看起来像这样的 IFrame <iframe id="contentPanel1" runat="server" />,它从我的 Default.aspx.cs 获取它的 src 属性,看起来像这样:

using System;
using System.Web.UI;


namespace MyFeedbackWebsite
{
    public partial class _Default : Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {

            

            if (Session["username"] == null)
            {
                Response.Redirect("~/login");
            }

            if ((string)Session["username"] == "admin")
            {
                Response.Redirect("~/admin");
            }

            this.contentPanel1.Attributes["src"] = "https://localhost:44350/Customer/"  + Session["username"].ToString();
        }
    }


}

在我的 Admin.aspx.cs 中,我检查用户名是否 = admin 以及用户是否已登录:

using System;

namespace MyFeedbackWebsite
{
    public partial class admin : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if ((string)Session["username"] == null)
            {
                Response.Redirect("~/Login");
            }

            if ((string)Session["username"] != "admin")
            {
                Response.Redirect("~/Default");
            }
        }
    }
}

在/Customer/ 目录中,我希望找到客户项目。但正如我提到的,如果目录是/Customer/user1/Default.aspx我希望 user1 值与当前会话匹配。先谢谢了!

最好的问候马克斯

【问题讨论】:

  • 你使用授权
  • 怎么样?我在哪里授权?在服务器上还是在实际网站上?
  • 从您提供需要限制的页面的任何位置。
  • 所以基本上我想根据用户名限制所有页面。唯一的例外是有权访问所有页面的用户管理员。我在哪里可以输入授权码?页面加载?别的地方? web.config?
  • 您必须分享更多有关您正在构建的系统的信息,以供任何人告知。我猜你正在使用 ASP.NET,但没有描述。人们如何在您的网站上进行身份验证?请花一些时间在互联网上搜索如何为您正在构建的系统添加授权,然后分享您尝试过的代码。

标签: c# html mysql .net


【解决方案1】:

一些观察

现在,我不知道你在做这个项目的背景,但似乎你对一些概念比较陌生,所以我只列出一些事情供你思考:

  • 如果这是一个新项目,我强烈建议您停止并转而查看 ASP.NET Core 或类似项目。 .NET Framework 正在慢慢被 .NET Core 取代,因此基于 .NET Framework 的新项目(例如 ASP.NET Web 窗体)很快就会过时(如果它不是从一开始就已经过时的话)。
  • 如果这只是一个业余时间/个人的小项目,一切都很好(除了以上几点) - 玩弄它是一种很好的学习方式。但是,如果这是一个商业或其他严肃项目,我建议您阅读 Web 应用程序中的安全最佳实践。使用像Session["username"] != "admin" 这样的结构来限制对页面的访问是不好的事情,而且很容易出错。 Take a look here 的示例配置哪些用户或角色可以访问哪些页面。

有问题的问题

在访问/Customer/user1/Default.aspx 时,我仍然不清楚您的代码的哪一部分正在处理/运行。但我建议您,不要让用户名成为 URL 的一部分,而是从后端的会话中获取用户名,然后提供与该用户名匹配的正确页面:

  1. 用户访问 URL /Customer/Default.aspx
  2. 后端验证用户是否登录。如果没有,用户将被重定向到登录页面
  3. 后端从会话中获取 username 并返回页面 <username>/Default.aspx(注意:这不是 URL,而是指向您正在服务的页面的文件路径或类似的东西 - 用户永远不会看到这个)

现在,用户将无法看到其他用户的页面,因为/Customer/user1/Default.aspx 不是有效的 URL - /Customer/Default.aspx 是。

【讨论】:

  • 嗨!感谢您的回复,我一开始确实尝试使用 ASP.NET 核心设置此页面,但我在控制台应用程序中制作了整个项目,我研究了一下,有些人说 .NET 核心的主要目的是用于控制台应用程序只要。所以我开始使用 .NET Framework。我想尽可能多地学习并测试新事物。我应该开始一个 .NET Core 项目吗?
  • @MaxK123 您一定误解了您当时阅读的内容。 Microsoft 正在将开发从 .NET Framework 转移到 .NET Core。所以是的,我绝对会建议您从 ASP.NET Core 开始(不是控制台应用程序,而是 ASP)。您可以查找“ASP.NET Core Identity”以获取有关典型身份验证和授权的指南。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
相关资源
最近更新 更多