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

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

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

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

Master page主頁面 ( 主板頁面

語意標籤 17CSS_Position 排版

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

###/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/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

ASPnet/33Member_Registeration 有做驗證信註冊

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

首先先刻前端

用webform就要盡量用控制項

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

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

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

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

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

hasbyte ( sqlserver 指令雜湊密碼

SqlDataReader 讀資料庫物件

ExecuteReader() 執行讀資料庫物件

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

Session

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

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

這時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"]+"光臨本站!!";
        }
    }
}

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

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

可以不知道密碼的狀態下

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

F F or T

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

嘗試 vs.tchcvs.tc.edu.tw/plan/index_login.asp

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

#下午九專題報告

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

#補充循序圖畫法

資料字典skma ?

循序圖 書的第十一章 351pg

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

畫完後會

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

使用者介面塑模

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

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

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

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

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

UI User interface 使用者介面

UX User Experience 使用者經驗

##第一個案例

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

##第二個案例

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

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

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

##活動圖

Last updated