繁体   English   中英

将 URL 限制为特定数据库用户名 ASP.NET

[英]Restrict URL to specific database username ASP.NET

我正在使用 ASP.NET 框架制作一个网站工具 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 的值与当前的 session 匹配。 预先感谢!

最好的问候马克斯

一些观察

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

  • 如果这是一个新项目,我强烈建议您停止并转而查看 ASP.NET Core 或类似项目。 .NET Framework is slowly being replaced by .NET Core, so a new project based on .NET Framework (such as ASP.NET Web Forms) will quickly become outdated (if it isn't already from the start).
  • 如果这只是一个业余时间/个人的小项目,一切都很好(除了以上几点)——玩弄它是一种很好的学习方式。 但是,如果这是一个商业项目或其他严肃项目,我建议您阅读 web 应用程序中的安全最佳实践。 使用Session["username"] != "admin"类的结构来限制对页面的访问是不好的事情,而且很容易出错。 在此处查看配置哪些用户或角色可以访问哪些页面的示例。

有问题的问题

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM