1.最小權限原則,只容許用戶作****,而不是"不容許用戶作****"
2.瀏覽器查看的是服務端代碼的執行輸出的文本,除非服務器有漏洞,不然瀏覽者沒法查看
服務端的ASPX,CS代碼,目標另存爲也是保存ASPX的執行結果,而看不到ASPX的源代碼,
JS,HTML是被輸出到瀏覽器上執行的,所以沒法禁止瀏覽者查看JS,HTML
3.C#代碼是運行在服務器端的,JS代碼是運行在瀏覽器客戶端的
4.能在瀏覽器端完成的事情,就不要到服務端去作
5.客戶端是不可信的
6.能直接將生成的內容以流的形式輸出給縱覽器,就不要生成臨時文件javascript
原則1:
C#代碼是運行在服務器端的,JS代碼是運行在客戶端
按鈕確認提交的實現(在button中的onclick中寫)
<input type="submit name="delete" value="刪除" onclick="return confirm('確認刪除?')"" />
代碼是運行在瀏覽器端的,和服務器端沒有關係
在服務器端"彈出消息窗口"
Response.Write("<script type='text/javascript'>alert('刪除成功!')</script>");
並非真的是在服務器端運行的,只是生成了JAVASCRIPT代碼到瀏覽執行,不推薦用些方法,推薦
用後面講的RegisterClientStartupScript,只是渲染到瀏覽器端java
案例1:數據庫
在項目中添加對System.Windows.Forms的引用,而後MessageBox.Show("Hello");
經遠程訪問測試,C#代碼是運行在服務器端的,Hello彈出在服務端
127.0.0.1是加環地址(LOOPBACK),localhost就是127.0.0.1的別名,是沒法在外部訪問的
0.0.0.0 任意IP,不用寫死綁定的IP,能夠用於任何IP均可能訪問網絡程序瀏覽器
案例2:安全
在ASP.NET中,能夠在訪問者磁盤中建立木馬文件
File.WriteAllText("c:/muma.exe","木馬(){QQ木馬();機器狗();灰鴿子();});
有CassiniDev.exe啓動測試,exe生成到了服務器的磁盤中,而不是訪問者的磁盤中,所以C#
代碼是運行在服務器中的,而不是瀏覽器中服務器
案例3:網絡
兩個學生分別訪問點擊自增1的界面,互不影響,由於不一樣用戶的變量內容是隔離的測試
原則2:
能在瀏覽器端完成的事情,就不要到服務端去作
按鈕隱藏一個控件就不要寫服務端代碼,在客戶端用JAVASCRIPT,DOM來操做就能夠,
好比要操做數據庫,顯然是在瀏覽器端作不到的,這時候就要寫服務端代碼,校驗用戶名,密碼
這樣的操做能夠放到瀏覽端(用戶名,密碼是寫死的),技術上能夠,可是這樣安全性太差,所以
必須放到服務器端orm
原則3:
客戶端驗證不能代替服務器端驗證
用客戶端驗證取款金額不能高於100元,若是客戶端把 JAVASCRIPT 禁用了,驗證將不生效
客戶端校驗是爲了很好的客戶端體驗,服務器端校驗是最後一次把關,防止惡意請求
後面講的 Validation就是ASP.NET內置的數據校驗技術,會在客戶端和服務器端同時校驗ip
原則4:不要把機密信息隱藏在HTML中 只有密碼輸對了才顯示下載地址,若是在客戶端判斷,先將下載地址隱藏,對了對顯示,用戶 能夠查看源碼獲得,密碼與下載地址 應該在服務端控制密碼不對則 Visible=False,服務端控件的 HyperLink1.Visible = false 是根本不輸出到客戶端的 應該是在機密頁面打開以前作權限校驗,而不是在一個頁面中作校驗,若是正確就導向