应用程序使用客户端控件限制客户端提交的数据的另一个主要控制对象,是最初不由服务器指定,而是由客户端计算机自己收集的数据。
HTML表单是一种最简单、最常用的机制,主要用于从用户收集输入并将其提交给服务器。用户在已命名的文本字段中输入数据,再将它们以名/值对的形式提交给服务器,是这种方法的最基本应用。但是,表单还有其他用法,即对用户提交的数据施加限制或执行确认检查。当应用程序使用这些客户端控件作为安全机制,防御恶意输入时,攻击者通常能够轻易避开这些控件,致使应用程序非常易于受到攻击。
下面对本章开头部分的HTML表单稍作修改,规定quantity字段的最大长度为1:
于是,浏览器将阻止用户在输入字段中输入任何超过1个字符的值,而且服务器端应用程序也认为它收到的quantity参数将小于10。但是,通过拦截提交表单的请求,并在其中输入任意 值;或拦截包含表单的响应,并删除maxlength属性,就可以轻易避开这种限制。