我記得在剛接觸ASP.NET編程的時候,微軟幫助文檔就特別強調,不能相信客戶端提交的任何數據,我們都要假象客戶端提交的數據都是不安全的,所以我們要對客戶端提交的數據進行驗證,所以.net里面給我們提供了驗證控件,很方便,但是你在看這些控件的使用幫助的時候,微軟肯定一樣會強調,我們在前台驗證后,還需要服務端驗證,為什么呢?估計很多新手會問了,.net里面的驗證控件不是服務器控件嗎?驗證控件確實是服務器端控件,但是你要知道,這些服務器控件僅僅是把客戶端驗證的功能封裝了而已,所以那些驗證控件,其實還是客服端驗證,而所有客戶端驗證,都不是真正的最安全的驗證方法,我們必須要要進行服務端驗證。為什么呢,請接着繼續看。
相信作為程序員,都會按照火狐瀏覽器,如果是經常進行web前端開發的話,肯定離不開火狐瀏覽器的。
安裝好FireBug插件
然后,用快捷鍵F12,就會彈出FireBug窗口
我寫了一個簡單的注冊登錄的功能,用了.net服務器驗證控件,對輸入進行驗證,但是沒有在服務端進行驗證
首先,我們不填寫數據,提交注冊按鈕,我們知道,肯定提交不了的,如上圖
然后按着上面步驟操作,把紅框里的代碼:
javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(“Button1″, “”, true, “1″, “”, false, false))
刪除掉,然后點擊提交按鈕,你會發現,數據竟然提交成功了,為什么呢?
這就是我上面說的,其實.net的服務器驗證控件,其實就是客戶端驗證,沒有進行服務端驗證的原因
當我們刪除驗證事件的時候,自然就不能進行驗證了,也就是我要說的主題,繞過了客戶端JS驗證
后面我再用同樣的方法,去掉登錄的客戶端驗證代碼,什么都不輸入,進行登錄,結果是登錄成功
互聯網上存在很多網站,不管是.net開發的,還是PHP,還是JAVA,如果不進行服務端驗證,按這個方法操作,都能繞過客戶端驗證
其實現在我們很多沒有安全意識的程序員,或者新手,都會忽略掉服務端驗證,原因之一是,他們完全沒有這個意識,即不懂。
再者是有些程序員抱着僥幸的心理,或者說是偷懶,以為客戶端驗證了,服務端不驗證,沒事,一般人察覺不出來,可正是他們這種僥幸的心理,從而讓他們的網站存在安全隱患。
除了利用火狐瀏覽器能夠繞過客戶端JS驗證,其實在黑客手里還有很多更加專業的工具,所以對數據進行客戶端和服務端驗證,非常有必要,也非常重要。