- Web應用安全威脅與防治
- 王文君 李建蒙編著
- 466字
- 2018-12-26 19:42:28
第1篇 引子
故事一:家有一IT,如有一寶
我的愛人是做銷售的,每天晚上回家都要上網填寫一個系統,若不填的話會扣獎金。有一天,她還是照常填寫好了,等要提交的時候,忽然出現一個對話框,如下:
可問題是,她仔細地檢查了填寫的日期,并沒錯,遂求助于我。我看了看,第一反應就是:這個提交是在客戶端做校驗的,那是相當不可靠的,我一定能繞過去這個驗證而正確提交。于是找到了這個按鈕的那段HTML代碼:
<input name="btn_SaveMsg" class="button" id="btn_SaveMsg" style="width: 110px;" onclick="return Check_Form();" type="submit" value="保存"/>
并查看了Check_Form函數,函數相當長,這里就不全列舉出來了,只貼幾行:
if(document.getElementById("txt_Evalueation_Date").value>returndate) { alert('前半天不能大于當天!'); document.getElementById("txt_Evalueation_Date").focus(); return false; } … return true;
但我們知道,只要是客戶端進行校驗的,就不靠譜。于是我用Chrome打開了這個頁面,然后在Console面板上執行了下面的命令:
MainPanel.document.getElementById("btn_SaveMsg").onclick="return true;" MainPanel.document.getElementById("btn_SaveMsg").click();
這里做簡單的介紹,MainPanel是Frame的名字,原始頁面包括了好幾個Frame,然后根據id取得保存按鈕這個元素,并且將onclick函數改成return true,即驗證永遠通過,這樣就可以跳過原來客戶端的Check_Form函數中那么多的return false的情況了,最后調用保存按鈕的click方法進行提交。
Bingo!提交通過!于是本人也獲得了一句贊語:家有一IT,如有一寶。
這個故事告訴我們——永遠不要在客戶端做安全檢驗!