注意:本页面内容为W3xue原创,未经授权禁止转载,违者必究!
来源:W3xue 发布时间:2017/11/3 16:46:06
在一个交互的HTML页面或者原生态APP等窗体上,都会有用户输入、服务器响应的内容。一般情况下,我们都会对用户的输入类型做一些文字说明,我们希望每个用户都按我们的提示来输入数据,但实际上,总有一些“不听话”或者不太熟悉流程的用户,会输入各种奇葩的数据。如果我们没有一个验证机制,就可能产生一些程序错误,导致影响用户体验。更糟糕的是,单纯文字的提示对黑客来说,不但没有阻挡作用,反倒给他们带来了帮助——黑客会专门输入你提示的数据类型伺机发动攻击。
为了对这些输入数据进行验证,我们有必要对每个控件中输入的数据进行验证。
一、需要验证哪些方面
总的来说,我们大致需要对这些输入进行如下方面的验证:
1、验证控件值是否符合特定格式
通过比较用户输入的数据格式,是否和我们规定的格式一样,例如,字符的数量多少,是否支持小数点、字母,数值的范围,特定的字符格式(例如Email、手机号、电话号码、身份证号等)。
2、验证是否会导致错误阻塞
某些用户输入可能会导致引发一个错误信息,导致窗体崩溃,例如读写数据库错误、读取文件/文件夹权限不够等。如果我们不做任何处理,玩玩会导致一些技术信息泄露,例如出错部分的详细代码。这些代码可能会被黑客利用。
3、欺骗和恶意代码
某些情况下,例如HTML页面,黑客会修改收到的静态文件,利用其中的表达提交信息,绕开一些验证,然后任意输入ta想要输入的信息提交给服务器。这时我们不加验证,就会全盘接受这些信息。而这些信息中可能包含一些恶意代码,导致程序崩溃或溢出异常。下面列出一些常见的恶意代码攻击方式:
- 输入超出长度的字符,导致缓冲区溢出会程序错误
- 权限方面的攻击代码,例如给自己添加一个管理员账号
- 一个SQL语句,对数据库进行肆意的增删改操作。如果数据库泄露,许多重要的用户信息将会被黑客下载利用
二、客户端验证和服务器验证
那么,如何防范这些黑客、或者无意识的用户提交的非法数据呢?大体来说,我们可以从客户端和服务器端两方面进行验证,来防范非法数据。
现代的浏览器,都支持客户端验证(一般是HTML5+JavaScript方式),而一些原生态的APP窗体也支持客户端验证。由于HTML5+JavaScript都可以被浏览器解释并直接运行,服务器不需要执行任何操作,客户端和服务器之间也没有任何数据往返,因此客户端验证可以有效的减轻服务器负担。而增加客户端验证后,也增大黑客攻击的成本,因为其必须花一定时间去去除这些验证方式。
现代的浏览器已经能够比较好的支持标准化的HTML5和JavaScript,因此兼容性上的问题会原来越少。例如,可以在页面上增加一个HTML5控件,让用户只能输入Email地址:
- E-mail: <input type="email" name="user_email" />
同样的,如果只想让用户输入数字,可以使用这样的H5控件:
- 年龄: <input type="number" name="user_age" />
更多的关于H5表单控件的知识,请点击这里。
某些情况下,可以一个表单失去焦点就对其进行验证,当然也可以采取在最后时刻对其验证的方式。总之,客户端验证是初步保证了用户数据的合法性,在这一层基本上就可以排除无恶意用户的错误输入了。
但是,仅仅有客户端验证对于一个有目的的黑客来说,只是一种骚扰,起不到根本性的防护作用。因此,必须在接受用户输入数据后,对其进行服务器端的验证。原则上,客户端必须对每一条输入都进行验证,而服务器应该再一次验证这些输入。服务器端验证的基本思想是,防止输入的数据绕过客户端的代码,对服务器进行攻击。
例如,我们必须验证一个用户输入的姓名中,是否含有单引号(')之类的注入语句。也许你觉得只验证文本框的内容就可以了,但是黑客通过同名的方法,很容易绕过这些限制。由于目前的编程语言大部分只能识别提交来的数据的方式,是GET还是POST,而没有办法验证是什么样的控件提交来的。
我们还可以添加一个限制,即从某一地址传来的表单数据才是有效的,而其他一切数据都是非法的。这一方法在服务器被非法上传了文件后会失效,但它会保证问题不是出在当前页面。
我们可以从以下方面对数据进行验证:
- 验证一个值是否是空
- 验证两个控件的值是否相等(常用于确认密码)
- 验证一个值是否会导致程序错误、泄露代码,或者导致程序崩溃或溢出
- 验证一个值是否包含HTML、JS等代码
- 验证一个值是否包含非法的SQL注入字符串
- 验证一个值的类型,如果要求是数字,是否处于某一范围;如果要求是字符,长度是否超过限制
- 验证一个值是否符合某些正则表达式,如,是否是Email地址、Url地址、身份证号、手机号、邮政编码等
在以后的章节中,会更加详细的介绍对用户输入的验证。
注意:本页面内容为W3xue原创,未经授权禁止转载,违者必究!
来源:W3xue 发布时间:2017/11/3 16:46:06