看好你的门-客户端传数据(8)-不安全的HTML表单限制

来源:互联网 发布:caffe使用googlenet 编辑:程序博客网 时间:2024/05/25 13:33

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考。

1、 简单说明

先说故事,某一天产品经理策划了一个方案,要搞一个促销。一个用户最多可以买9个鸡蛋。一个鸡蛋一分钱,好事情。
开发人员需要对系统进行修改和调整。
让我们脑补一下,传统行业搞互联网电商的场景:
产品经理:赶快改,赶快上,赶快搞活动
运维经理:版本升级,提交上线评估报告,风险测试报告,系统测试报告,各位负责领导签字文件;
开发人员A:靠,老子一早从9点干到晚上9点,还要老子去写那么多报告,让我想想有那么好办法…
开发人员B:我们把验证放在HTML页面吧,直接用html的长度限制,这样就不用重启服务,也不算版本升级
开发经理:人才呀,就这样干
… (使用长度限制)
测试人员:测试好了,一个人只能买0-9个鸡蛋,输入10或者其他超过9的数据都被限制了;
开发经理:提交上线

2、 在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>    价格:0.01元 <br>    数量(每人最多购买9个):<input type="text" name="quantity" maxlength="1" />     <br>    <input type="submit" value="确认购买" />        </form></body></html>

只能输入一个字符,我也试过,确实如此呢。

3、 被攻击

要攻击这种情况,非常的轻松。
1、 利用拦截提交的表单,在中间输入任意数字。 最简单实用;
2、 去掉页面中的maxlength=”1”限制,这种方法通俗易懂。比如用chrome浏览器,点击“审查元素”,找到maxlength=”1”,然后修改属性,去掉maxlength=”1”。然后刷新下页面。你回发现,你无论输入多长的数字都可以…. 不知道购买100万个鸡蛋,是不是会让这个公司破产……

4、 反思中的观察和步骤

1、 如果页面中采用了maxlength或者其他的类似的限制,那么提交大于这个长度但是格式合法的数据;
2、 如果服务端接收了这个数据,那么可以推断出服务器没有采取客户端确认的机制;
3、 利用这个机制并发现是否存在其他的漏洞和缺陷

0 0