首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考。
继续说故事,某一天产品经理策划了一个方案,要搞一个促销。一个用户最多只能用一次鸡蛋优惠券。
开发人员需要对系统进行修改和调整。
让我们脑补一下,传统行业搞互联网电商的场景:
产品经理:赶快改,赶快上,赶快搞活动
运维经理:版本升级,提交上线评估报告,风险测试报告,系统测试报告,各位负责领导签字文件……;
开发人员A:靠,老子一早从9点干到晚上9点,还要老子去写那么多报告,让我想想有那么好办法…
开发人员B:在html表单上做限制,买过一次以后就禁用;
开发人员A:这办法不错,只要修改html,不算版本升级;
开发经理:兄弟们,赶紧开发;
… (使用html进行元素禁用)
测试人员:测试好了,一个人只能用一次鸡蛋优惠券,用完就灰色了,我再也用不了了,达到目标。
开发经理:提交上线
…
使用了一次以后的页面,确认购买的按钮灰掉了。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>看好你的门-阿饭同学 </title></head><body> <form action="aShopPrice.action" method="post" name="form1" " > 商品:鸡蛋 优惠券,只能使用一次<br> 您已经使用一次<br> <input type="submit" value="确认购买" disabled="true"/> </form></body></html>
无论我怎么点,这个按钮都是灰色的。
诶呀,一不小心,又被攻击了…
1、 最简单的方法,比如用代理服务器拦截之后修改,直接让disabled=false 或者去掉这个属性;
2、 比如我们把这个页面保持下来,用审查元素功能找到 :disabled=true 修改元素属性,去掉这写代码,这样验证就失效了,再多用几次鸡蛋优惠券玩玩吧。。
1、 元素禁用好像现在用的不是很多,不过只要服务器采取了和客户端相同甚至更加严格的确认机制,这种应用就比较难被攻击;
2、 因为用户的输入可能带来各种各样的问题,这种方法能够将用户无意中的错误过滤掉,能够减少网络流量和服务器负担,因此,这种方法该用还是要用。