前言: 從這篇我們開始學習web開發原則,所謂沒有規矩,不成方圓,在我們編程這個領域也是一模一樣的,我們需要對我們的編程設計很多規則,當然這些規則都是你經過了這麼多年提煉出來的我們必須注意的事項,如果我們不注意的話我們的網站將會遇到很大的漏洞,下面我就開始說一下Web開發中的一些基本原則。
- Web開發的一些基本原則
(1) 最小許可權原則,只允許使用者做什麼,而不是”不允許使用者做什麼”。
(2) 瀏覽器查看的是服務端代碼的執行輸出文本,除非伺服器有漏洞,否則瀏覽者無法查看服務端的aspx.cs代碼,目標另存新檔也是儲存的aspx的執行結果,而看不到aspx.cs的原始碼,js,html是被輸出到瀏覽器上執行的,因此無法禁止瀏覽器查看查看JS,Html。
(3) C#代碼是運行在伺服器端的,JS代碼是運行在瀏覽器用戶端的。
(4) 能在瀏覽器端完成的事情,就不要到服務端去完成。
(5) 用戶端是不可信的。
- 原則1
(1) C#代碼是運行在伺服器端的,JS代碼是運行在瀏覽器用戶端的。
(2) 按鈕確認提交的實現在Button控制項的onclick中寫入如下代碼:
1) <input type=”submit” name=”delete” value=”刪除” onclick=”return confirm(‘真的要刪除嗎?’)” />
2) 代碼是運行在瀏覽器端的,和伺服器端沒有關係。
(3) 在服務端”彈出訊息視窗”
1) response.write(”<script type=’text/javascript’>alert(“刪除成功!”)</script>”);
2) 並不是真的是在伺服器端啟動並執行,只是產生了JavaScript代碼到瀏覽器端,瀏覽器會在解析文檔的時候運行alert,不推薦用這種寫法,讀懂即可,推薦用後面講的RegisterClient.startupScript。只是渲染到瀏覽器端,所以並不會得到對話方塊關閉服務端的代碼才會執行下去。
3) 對於伺服器端的代碼來說,產生一堆HTML代碼就是一堆字串,沒有任何意義,只有到了瀏覽器端執行才會有意義。
(4) 案例1:在項目中添加對System.Windows.Forms的引用,然後MessageBox.Show(“Hello”);用Cassini.Dev.exe啟動測試程式讓別人的電腦遠程測試,證明c#代碼是運行在伺服器端的。
註:在Web表單上面拖放一個控制項,引入命名空間,將控制項起名為MessageBox.Show(),雙擊此控制項在其事件下面寫入如下代碼:
MessageBox.Show("我是伺服器上面的");
(5) 127.0.0.1是迴環地址(LoopBack),就是表示通過迴環地址訪問本機,哪怕是本機外網地址也訪問不了,localhost就是127.0.0.1的別名,是無法在外部存取的。
(6)0.0.0.0任意IP(Any IP),不用寫死綁定的IP了,通過任何一個網卡都可以訪問網路程式。
(7) 案例2:用asp.net,可以再訪問者磁碟中建立木馬檔案,在木馬檔案中寫入讓別人關機的檔案,這樣的話當別人單擊的時候就會強制關機啦,嘿嘿,代碼寫法如下:Fille.WriteAllText("c:/muma.exe", "我是木馬,我要你關機,你馬上關機");用CassiniDev.exe啟動測試程式讓別人遠程測試(VS內建的伺服器不能遠程測試),exe產生到了伺服器的磁碟中,而不是訪問者的磁碟中,因為C#代碼是運行在伺服器端的,而不是瀏覽器中的,瀏覽器得到的只有返回HTML的內容。
(8) 案例3.兩個人分別訪問點擊自增1的介面,互不影響,因為不同使用者的變數內容是隔離的。
1) 拖放一個Button和Label控制項,雙擊Button控制項,寫入如下代碼:
1 protected void Button1_Click(object sender, EventArgs e) 2 3 { 4 5 int i = Convert.ToInt32(Label1.Text); 6 7 i++; 8 9 Label1.Text = i.ToString();10 11 }
- 原則2
(1) 能在瀏覽器端完成的事情我們就不要去伺服器端完成。
(2) 按鈕隱藏一個控制項就不要再服務端寫代碼,在用戶端用JavaScript,dom來操作就可以,比如要操作資料庫,顯然是在瀏覽器端做不到的,這時候就要寫服務端代碼,校正使用者名稱,密碼這樣的操作可以放在瀏覽器端(使用者名稱密碼都是寫死的),技術上可以,但是這樣安全性較差,因此必須放到伺服器端。
(3) 拖放一個Button和TextBox控制項,設定Button控制項為隱藏
1 TextBox1.Visible = false;2 3 <input type="button" value="用戶端隱藏" OnClick="document.getElementById('TextBox1').style.display='none'" />
注釋:開發原則1我們就說到這裡了,下節部落格是web開發原則2,希望我們共同來學習,我們的群號是:159227188,歡迎大家在這裡交流。