> For the complete documentation index, see [llms.txt](https://johch3n611u.gitbook.io/c50108/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://johch3n611u.gitbook.io/c50108/ju-li-cheng-bei/201905/asp.net-webform-jie-master-page-zhu-session-jie-deng-ru-login-gong-injection-gong-ju-xiang-cheng-shi.md).

# 2019/0517/ASP.NET Webform介紹Master page 主頁 & Session 簡介 & 登入login驗證 & 隱碼攻擊injection & 工具箱程式碼片段使用

\#ASP.NET Webform介紹Master page 主頁 & Session 簡介 & 登入login驗證 & 隱碼攻擊injection & 工具箱程式碼片段使用

登入有幾千幾百種做法各自有內容

### 首先/ASPnet/Site1.Master ( 用於等等登入驗證介紹&#xD;

Master page主頁面 ( 主板頁面

語意標籤 17CSS\_Position 排版

引入 Nugget bs4 所有內容頁面都會吃到libray庫效果 排版

#### ###/ASPnet/Site1.Master&#xD;

```
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="ASPnet.Site1" %>

<!DOCTYPE html>

<html>
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <link href="Content/bootstrap.min.css" rel="stylesheet" />
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
        <div class="container">
            <div class="row">
                <header class="col-md-12">
                    header
                </header>
            </div>
            <div class="row">
                <aside class="col-md-3">
                    aside
                </aside>
                <article class="col-md-9">
                    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
                    </asp:ContentPlaceHolder>
                </article>
            </div>
            <div class="row">
                <footer class="col-md-12">
                    footer
                </footer>
            </div>

        </div>
    </form>
</body>
</html>

```

\###/ASPnet/41MainPage.aspx

```
<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="41MainPage.aspx.cs" Inherits="ASPnet._41MainPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <h1>MainPage</h1>
</asp:Content>

```

例子 改 要的 最後憑空寫出來 才算是學會

### 接著做/ASPnet/42Login.aspx&#xD;

ASPnet/33Member\_Registeration 有做驗證信註冊&#x9;

雜湊只能單一方向 比對方式 要雜湊完後去比對

首先先刻前端

用webform就要盡量用控制項

不然就要用form 然後用 javascript 寫 post

{% embed url="<https://www.google.com/search?q=javascript+post&rlz=1C1GCEU_zh-TWTW835TW836&oq=javascript+post&aqs=chrome..69i57j69i65l2j0l3.7112j0j9&sourceid=chrome&ie=UTF-8>" %}

刻完後就到/ASPnet/42Login.aspx.cs寫後端

引入 using System.Data.SqlClient;using System.Configuration;物件庫

SqlConnection 資料庫連接物件 利用 ConfigurationManager 組態經理物件

SqlCommand 資料庫指令物件 但 基於資安(如下補充)必須使用 資料庫物件方法Parameters.AddWithValue(“@參數代號，資料庫欄位名稱”)

hasbyte ( sqlserver 指令雜湊密碼

{% embed url="<https://www.google.com.tw/search?client=opera&q=hashbytes&sourceid=opera&ie=UTF-8&oe=UTF-8>" %}

SqlDataReader 讀資料庫物件

ExecuteReader() 執行讀資料庫物件

但是就算驗證登入後 只要記得網址 直接 key網址也能進入 那怎辦呢 ?

### &#xD;Session

{% embed url="<http://fred-zone.blogspot.com/2014/01/web-session.html>" %}

藉由 Session (狀態保留(暫存包? 生命週期會同網頁/網站/瀏覽器關閉消失

把門票與登入者姓名暫存到這個包裹內轉移到後端&#x20;

這時Master page主頁面的效益就來了 只要把檢查session寫在主頁 其他頁面就都吃的到不用重複寫

登出時要多寫清空 session

Mvc 也可以用 session 可以穿越很多 controller 但 viewdata viewtemp viewbag 生命週期不一樣 會在特別講一次 ???

以下方式為 主頁面 包含側欄 頁面 排版格式與cs (類似mvclayout) 藉由 登入頁面 進入到 內容頁面

#### ### /ASPnet/Site1.Master

```
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="ASPnet.Site1" %>

<!DOCTYPE html>

<html>
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <link href="Content/bootstrap.min.css" rel="stylesheet" />
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
        <div class="container">
            <div class="row">
                <header class="col-md-12">
                    header
                </header>
            </div>
            <div class="row">
                <aside class="col-md-3">
                    aside
                </aside>
                <article class="col-md-9">
                    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
                    </asp:ContentPlaceHolder>
                </article>
            </div>
            <div class="row">
                <footer class="col-md-12">
                    footer
                </footer>
            </div>

        </div>
    </form>
</body>
</html>

```

#### ### /ASPnet/Site1.Master.cs

```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ASPnet
{
    public partial class Site1 : System.Web.UI.MasterPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["id"] == null)
                Response.Redirect("42Login.aspx");
        }
    }
}

```

\### /ASPnet/42Login.aspx

```
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="42Login.aspx.cs" Inherits="ASPnet._42Login" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <link href="Content/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
    <form id="form1" runat="server">
        <div class="container">
            <div class="form-group">
                <label class="col-form-label" for="txtAccount">帳號:</label>
                <asp:TextBox ID="txtAccount" runat="server" CssClass="form-control"></asp:TextBox>
            </div>
            <div class="form-group">
                <label class="col-form-label" for="txtPswd">密碼:</label>
                <asp:TextBox ID="txtPswd" runat="server" CssClass="form-control" TextMode="Password"></asp:TextBox>
            </div>

            <asp:Button ID="Button1" runat="server" Text="登入" CssClass="btn btn-primary" OnClick="Button1_Click" />
        </div>


        

    </form>
</body>
</html>

```

#### ### /ASPnet/42Login.aspx.cs

```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;

namespace ASPnet
{
    public partial class _42Login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MySystemConnectionString1"].ConnectionString);
            SqlCommand Cmd = new SqlCommand("select * from members where Account=@account and pswd=hashbytes('sha2_256',@pswd)", Conn);
            Cmd.Parameters.AddWithValue("@account", txtAccount.Text);
            Cmd.Parameters.AddWithValue("@pswd", txtPswd.Text);
            SqlDataReader rd;
            Conn.Open();
            rd = Cmd.ExecuteReader();
            if(rd.Read())
            {
                Session["id"] = rd["Account"];
                Session["name"] = rd["Name"];
                Response.Redirect("41MainPage.aspx");
            }
            else
            {
                Response.Write("<script>alert('帳密錯誤!!')</script>");
            }

            Conn.Close();

        }
    }
}

```

\### /ASPnet/41MainPage.aspx

```
<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="41MainPage.aspx.cs" Inherits="ASPnet._41MainPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    
    <h1><asp:Label ID="Label1" runat="server" Text=""></asp:Label>MainPage</h1>
</asp:Content>

```

#### ### /ASPnet/41MainPage.aspx.cs

```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ASPnet
{
    public partial class _41MainPage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = "歡迎"+Session["Name"]+"光臨本站!!";
        }
    }
}

```

### ##題外話: 很多重複的片段程式碼可以往工具箱拉會自動成片段&#xD;

### ###補充: 駭客方式(資料隱碼攻擊SQL injection) &#xD;

可以不知道密碼的狀態下

Select \* from xxx where Accaunt =’aaa’ and pswd =’’ or|=|--‘             (--為註解

&#x20;                        F               F  or  T               &#x20;

拋例外處理探查資料庫結構

嘗試 vs.tchcvs.tc.edu.tw/plan/index\_login.asp

帳號aaaa     密碼‘or’’=’’

![](/files/-Lf8vg86Y3V5z5wILlc2)

\#下午九專題報告

其他組功能很齊全 我們組 哈哈哈… 看來這禮拜要多做點 ( 乾脆直接做好

\#補充循序圖畫法

資料字典skma ?

循序圖 書的第十一章 351pg

Usecase可以定義系統有甚麼功能

畫完後會

物件互動行為塑模 ( 活動圖 (考試常用 、 (較細膩) 循序圖 (實務上常用

使用者介面塑模

靜態物件資料結構塑模 ( 資料 類別

![](/files/-Lf8vpQD7-USaLNt3nCY)

Opt 不一定從頭到尾 Usecase 對應一張 循序圖

![](/files/-Lf8vt1DBsR7iEcxuY6n)

UI循序圖 樣子要去 使用者介面塑模看  (  施工的人必須要按圖設計 ( 系統分析師畫圖 ( 分層負責

AC ( 沒有介面的應用程式  其實可以把 應用程式的 功能畫出來 但大多都是在畫一張  AC循序圖

建議先將 順序畫完後 再去編 號碼

{% embed url="<https://www.google.com/search?q=UI+UX&rlz=1C1GCEU_zh-TWTW835TW836&oq=UI+UX&aqs=chrome..69i57j69i61j69i60j69i65l2j69i61.5336j0j7&sourceid=chrome&ie=UTF-8>" %}

UI User interface 使用者介面

UX User Experience 使用者經驗

### ##第一個案例&#xD;

![](/files/-Lf8vzhDwdvEsKHHaqg8)

![](/files/-Lf8w1T9_Vu_TueC9fHF)

左邊  右邊 其實就是兩張循序圖

![](/files/-Lf8w4nadH_SqwxdKD35)

### ##第二個案例

![](/files/-Lf8w9WWS2c8B-r6DJYk)

![](/files/-Lf8wBKy4fBWVMcO6ItK)

### ##第三個 會員註冊 案例 寶寶組

![](/files/-Lf8wFQLYzE4hW-Ixfo9)

### ##要知道 確切的流程圖 循序圖名稱 才能切的乾淨

![](/files/-Lf8wJLX-0dQxJDxIJDR)

狀態就會把上面生命線改成狀態 在表達狀態變化

### ##活動圖&#xD;

![](/files/-Lf8wNUngTNkgDsKDBLQ)
