webform登入操作中Regex運用

來源:互聯網
上載者:User

標籤:style   blog   http   color   資料   2014   for   問題   

           關於Regex的運用,估計很多人都會覺得這很麻煩。確實很麻煩,太多運算式我也記不住,很多都是臨時需要用的時候再去查,有點小學生讀小說的架勢,不認識的字再去翻字典。

          Regex嚴格來說對於程式的功能實現作用不大,他的作用在於程式的安全性和程式保護,比如登入的時候,如果不寫Regex,很容易產生資料注入的情況。程式的安全性得不到保障,當然用其他的判定方法也能起到同樣的作用,不過相對來說,寫個Regex是最簡單的了。

         這裡說的是webform登入的Regex,那我們先建一個webform項目,然後添加一個web表單編輯

//註:這兒最好在textbox下面添加一個label來對輸入文字進行說明,以增加使用者的便利性。

然後我們建立一個button-click事件,

 1  protected void Button1_Click(object sender, EventArgs e) 2         { 3             string UserName = TextBox1.Text; 4             string UserPWD = TextBox2.Text;
/**************************************************/ 5 ABCbank bll = new ABCbank(); 6 bool result = bll.login(UserName ,UserPWD );
/*****//註:這兒是一個BLL中的判斷調用,頁面跳轉中判斷使用者名稱和密碼是否匹配用的***/

7 if (result == true)

8 {
9 Server.Transfer("webform2.aspx");

10 }

11 else

12 {

13 Response.Write("<script>alert(‘帳號或密碼錯誤‘)</script>");

14 }

15 }

此時,我們對上一頁面兩個textbox輸出的兩個值建立過程來返回,代碼如下

   public string UserName        {            get            {                return TextBox1.Text;            }        }        public string UserPWD        {            get            {                return TextBox2.Text;            }        }    }

這時候我們建立一個webform2表單,在webform2中放兩個label,在webform2的Page_Load下我們添加如下代碼

 protected void Page_Load(object sender, EventArgs e)        {            WebForm1 wf1;            wf1 = (WebForm1)Context.Handler;            Label1.Text = wf1.UserName;            Label2.Text = wf1.UserPWD;        }

在web.config中添加一個資料來源,就可以進行跳轉了。從程式上來說,這裡功能實現是沒有問題的。但是,是否一定要正確的使用者和密碼才能登入呢,當然不是,在這裡就不多講進入方式,只講一下簡單的SQL注入吧。SQL注入的意思就是通過使用者名稱密碼的輸入,將SQL語句編入其中以進行資料注入,那麼這樣,這兒就需要進行一個程式保護問題。

 我們首先考慮一下我們的使用者名稱,是否可以制定一定的規範,就如同社會安全號碼碼,只能是15位或者18位的數字一樣。假如,我們設定我們的使用者名稱只能由英文字母和數字組成,不包含空格及標點符號,那麼我們應該怎麼寫這個保護呢,我們首先來看看定義英文和數位Regex:"^[A-Za-z0-9]+$",再看看定義密碼的Regex,只能由字母,數字和底線組成的運算式"^[A-Za-z0-9]+$",那我們就來對使用者名稱和密碼的輸入寫入Regex看看 

 string UserName = TextBox1.Text;            string pattern = "^[A-Za-z0-9]+$";            Regex r = new Regex(pattern);            Match m = r.Match(UserName );            if (m.Success)            {                Response.Write(m.Value);            }            else            {                Response.Write("使用者名稱只能由字母和數字組成");            }                      string UserPWD = TextBox2.Text;            string pattan1 = "^[A-Za-z0-9]+$";            Regex r1 = new Regex(pattan1);            Match m1 = r1.Match(UserPWD );            if (m1.Success)            {                Response.Write(m1.Value);            }            else            {                Response.Write("密碼只能由數字和字母組成");            }

在這裡我們加入了Regex的判斷,如果輸入的字元不符合我們的判定,那麼就會提示輸入錯誤,這樣就能有效避免一些資料注入的情況。當然,同樣的方法也適用於註冊,或者其他一些資料輸入的地方。需要說明的是,或許有人會因為我把判斷寫在前端來詬病這種方法會影響程式啟動並執行速度,也有人喜歡將判定寫在後台,不過我個人覺得還是前端好一些,有問題早解決,等資料傳入背景這個過程中會不會發生其他的什麼資料滲透情況呢?如果能在第一時間就把非法輸入給踢出局,未嘗不能這樣。判斷和資料獨立,也能保證資料的安全性。
最後,初學者,有什麼說的不對的,請懷著看戲的心情閱讀此文,謝謝@!

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.