Web应用安全威胁与防治
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第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,如有一宝。

这个故事告诉我们——永远不要在客户端做安全检验!