主頁 > 軟體工程 > 嘗試創建登錄頁面,但用戶名與密碼不匹配[學習目的]

嘗試創建登錄頁面,但用戶名與密碼不匹配[學習目的]

2022-01-03 05:25:23 軟體工程

如果用戶從它登錄的資料庫中輸入任何用戶名或密碼。它們的索引之間不會交叉匹配。我正在作為初學者學習這個。

if(txtusername.Text != null && txtpassword.Text != string.Empty)
{
    sql = string.Format(@" select * from idpass where username ='{0}' ", txtusername.Text );
    DataTable dtForNameAndRole = LoadDataByQuery(sql); 
    if(dtForNameAndRole.Rows.Count > 0)
    {

        sql = string.Format(@" select * from idpass where password ='{0}' ", txtpassword.Text);
        DataTable dtForNameAndRole2 = LoadDataByQuery(sql);
        if (dtForNameAndRole2.Rows.Count > 0)
        {
            sql = string.Format(@" select * from idpass where username = '{0}' and password ='{0}' ", txtusername.Text, txtpassword.Text);
            DataTable dtForNameAndRole3 = LoadDataByQuery(sql);
         
            Response.Redirect("Dashboard.aspx");
        }
        else
        {
            lblMessage.Text = "No Such Password";
        }
    }//end of if
    else
    {
        lblMessage.Text = "no such user";
    }
}
else
{

    msgtr.Visible = true;
    lblMessage.Text = "Sorry! Invalid user name or password.";
    lblMessage.ForeColor = Color.Red;
    return;
}

uj5u.com熱心網友回復:

您現有的代碼中有很多問題。

  1. 您不應將普通密碼存盤在資料庫中。
  2. 不需要呼叫 3 次查詢。一次就夠了。
  3. 您不應只查詢密碼,因為許多用戶的密碼可能相同。
  4. 不要*在選擇查詢中使用。您應該將列用作別名。
  5. 放置斷點并除錯您的代碼以查看您正在呼叫的查詢是什么。通過這種方式,您將了解您的查詢是否正確。您也可以在資料庫中運行此查詢以檢查它是否按預期作業。

uj5u.com熱心網友回復:

如前所述,這是為了學習。但是,意識到您想使用“內置系統”進行登錄非常重要。這篇文章的原因太長了。但是通過使用定義的內置登錄系統?

然后您可以使用預制模板進行登錄。

您可以使用 IIS(互聯網服務)設定安全性,而不必撰寫基于 Web 的整個安全系統的代碼。這將節省我可以算出的整整一個月的扎實作業。如果您使用內置的登錄系統?

然后,您甚至可以將 asp.net 登錄控制元件放入一個頁面 - 它會為您完成所有的魔法和編碼 - 換句話說,有一個巨大的系統在幕后為您管理安全和登錄。簡而言之?

不要嘗試推出自己的安全系統和登錄系統 - 這作業量太大了。

好的,既然我已經概述了上述內容,我們當然仍然在這里學習。因此,讓我們修復您擁有的代碼。

所以,首先,我假設你去了專案->(你的專案屬性),并在設定下設定了一個連接字串(不要手動輸入 - 在設定中設定,這樣你就不必編碼了代碼中的連接字串。您需要一個通用的連接設定,從那時起,當您開始發布到實際網站時,您可以在一個地方更改此設定。

該設定是您將在此處找到的設定:

嘗試創建登錄頁面,但用戶名與密碼不匹配 [學習目的]

好的,現在我們的代碼。像每個人一樣,每當我們需要提取一些資料時,磨損幾個鍵盤都會有點累。最終,您需要考慮使用像 EF(物體框架)這樣的資料框架來分類和“抽象”您的資料庫操作。

但是,在開始時 - 我認為嘗試 測驗并嘗試一些基本和簡單的資料庫操作是個好主意 - 例如您的示例 sql 查詢。

所以,首先,讓我們建立拯救世界貧困和鍵盤的東西(這樣我們就不必一遍又一遍地重新編碼一些簡單的 SQL 查詢)

所以,讓我們放下這段代碼:

    DataTable LoadDataByQuery(SqlCommand cmdSQL)
    {
        DataTable rstData = new DataTable();
        using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
        {
            cmdSQL.Connection = conn;
            conn.Open();
            rstData.Load(cmdSQL.ExecuteReader());
        }
        return rstData;
    }

所以,現在你的代碼可以變成這樣:

正如所指出的,我們不能也永遠不會單獨檢查密碼,因為許多人可能擁有相同的密碼。

所以我們可以檢查用戶 - 或者給訊息

或者 THEN 檢查用戶 密碼 - 并給出錯誤的密碼訊息。

此外,嘗試在沒有這么多嵌套的情況下進行編碼 - 難以除錯且難以遵循。我傾向于顛倒條件,并在出現問題時退出代碼,然后在代碼正常時繼續運行。這樣你就可以洗掉一大堆嵌套的 if /else。

試試這個代碼:

       if (txtusername.Text == string.Empty)
        {
            msgtr.Visible = true;
            lblMessage.Text = "Please enter a user name";
            return;
        }
        // check/get user
        SqlCommand sql = new SqlCommand();
        sql.CommandText = @" select * from idpass where username = @user";
        sql.Parameters.Add("@user", SqlDbType.NVarChar).Value = txtusername.Text;
        DataTable dtForNameAndRole = LoadDataByQuery(sql);

        if (dtForNameAndRole.Rows.Count == 0)
        {
            msgtr.Visible = true;
            lblMessage.Text = "no such user";
            return;
        }

        // if we get this far, then user name = ok
        // user ok, try for pass word
        sql.CommandText  = " AND password = @Pass";
        sql.Parameters.Add("@Pass", SqlDbType.NVarChar).Value = txtpassword.Text;
        DataTable dtForNameAndRole2 = LoadDataByQuery(sql);

        if (dtForNameAndRole2.Rows.Count == 0)
        {
            msgtr.Visible = true;
            lblMessage.Text = "Sorry! Invalid user password";
            lblMessage.ForeColor = Color.Red;
            return;
        }
        //get this far, user   password = ok
        Response.Redirect("Dashboard.aspx");
    }

還要注意我們人類的思想是如何運作的。例如,我們在 SO? 你從上到下閱讀——因此你的大腦以這種方式作業。

因此,請注意上面的代碼不僅易于閱讀,而且易于遵循。

嗯,檢查用戶名?不好,設定訊息 - 退出 - 我們完成了!!

如果用戶沒問題,嘿,讓我們繼續解決這個問題 - 讓我們試試用戶 密碼?不好,設定訊息 - 退出 - 我們完成了!

嘿,如果我們走到這一步?那么我們就完成了!!!

嘗試上述方法 - 我認為您喜歡這種想法和風格。

還要注意,雖然我們確實多加了 2 行代碼來設定引數?

這些引數是 sql 注入安全的。我們能夠“添加”到 sql 和引數(從而節省更多代碼)。

我們不必擔心單引號 - 再次字串連接容易出錯。

所以我的教訓和要點?我們使用引數不僅是為了防止 sql 注入,而且實際上我們又得到了更具可讀性和可維護性的代碼,并且不必將字串連接到 sql 中(好吧,好吧,我們做了一些連接 - 但不是用單引號和雙引號的混亂組合)。我指出這一點,因為我們不僅獲得了 sql 注入代碼,而且撰寫代碼的努力也更少了。我從不喜歡人們只是敲鼓不使用基于用戶輸入的 sql 連接字串 - 但另外一個人應該至少提供一種編碼方法,以減少建議代碼以防止 sql 注入的痛苦和痛苦。

我經常使用上面的 EVEN WHEN 沒有機會進行 sql 注入,因為您甚至可以即時添加到 sql,如上所示,即時構建和添加更多引數,就像我們上面所做的那樣。

祝你好運 - 在新的一年里一切順利。

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/401339.html

標籤:C# 网站 sql-server

上一篇:從表中讀取資料時顯示當前加載的資料

下一篇:如何避免錯誤--System.InvalidCastException:無法將物件強制轉換為型別“System.Collections.Generic.ICollection”

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more