簡體   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