web安全学习-绕过客户端限制
我们在使用web应用程序时,经常会遇到一些在客户端所做的限制,例如,我们在注册用户时要求输入格式正确的邮箱。然而在客户端所做的限制都是不安全的,这次就来说一下如何绕过客户端的限制。
1. 通过客户端传送数据
通过客户端向服务器段传送数据主要通过下面的方式实现:
隐藏表单字段(1.保存HTML页面的源代码,编辑字段的值;2.拦截数据包并修改数据)
HTTP cookie(拦截数据包并修改)
URL参数(拦截数据包并修改)
Referer消息头(拦截数据包修改)
模糊数据:对客户端传送的数据进行加密或进行某种形式的模糊处理(1.根据模糊字串的明文,破译所使用的模糊算法;2.通过应用程序的其它功能来生成有效负载的模糊值;3.用其他的模糊值重传已达到目的;4.提交畸形字符串如包含超长值,不同字符集等错误的字符段,尝试攻击负责对数据进行解密或去模糊处理的服务器逻辑)
Asp.net viewState:模糊值为base64编码的值,可以去解码然后编译重新发送(1.确定是否启用了MAC保护)
2.收集用户的信息:HTML表格
长度限制:抓包改变数据或者拦截包含数据表单的响应,并删除maxlength属性,可以避开这种限制
基于脚本的确认:(禁用Javascript,修改数据包)
禁用元素:(重复提交包含这些元素的数值,看服务器是否有效)
3.收集用户的信息:浏览器扩展
常见的浏览器扩展技术:Java applet,Flash和Silverlight,由于这些技术的用途基本相同,他们也提供类似的安全功能:均被编译成中间字节码,他们在提供沙盒执行环境的虚拟机中运行;他们可能会使用远程框架,这类框架采用序列化来传输复杂数据结构或通过HTTP传送对象
攻击浏览器扩展的方法:1.拦截并修改浏览器扩展组件提出的请求及服务器的响应。2.可以直接对组件实施攻击,并尝试编译它的字节码。
上面说了几种在客户端上常见的限制和绕过方法,我们知道这种在客户端上所做的都是不安全的,最好就是把这些都放到服务器中,然而又是为了效率,我们不得不在客户端上做这些,可以采取以下的几种方法来保证其安全:
通过客户端传送数据:进行签名与(或)加密防止用户篡改(最好不要通过客户端传送重要数据)
确认客户端生成的数据
日志与警报