本文带给你们的内容是动态防护WAF的技术原理及编程实战。css
将经过介绍ShareWAF的核心技术点,向你们展现动态防护的优点、实现思路,并以编程实战的方式向你们展现如何在WAF产品开发过程当中应用动态防护技术。前端
ShareWAF是一款动态防护型WAF产品,其在反自动化***、反爬虫等领域应用了动态防护技术。web
相比于传统WAF,动态防护型的WAF,有很是显著的优点:编程
【动态防护优点、原理】浏览器
归纳而言,优点体现为两个词:主动防护、不可预见安全
传统WAF,是静待***来临、识别***,再抵御***。并发
应用动态防护技术后,WAF将逆转***模式:再也不被动,而是时刻处于主动出击、积极防御状态。ide
举个例子:工具
假如打开一扇门:字体
传统WAF状态下,门后的景象老是同样的。
若是是动态防护WAF,每次打开门看到的将是不一样的景色,多是草原、多是麦田。即:随机变化 、不可预测。
再举个例子:
好比射箭:
传统WAF状态下,箭靶是固定的。
若是是动态防护WAF,箭靶将是随机移动的。即:动态变化,目标不可预测。
具体到WAF产品中。
好比反暴力破解,传统WAF可能采用一套规则,例如:访问者IP或设备指纹+持续登陆行为+连续尝试登陆次数+登陆失败次数,经过规则判断是否属于暴力破解行为。
这是正统的、中规中矩的防卫理念,是被动式的。
在这个进程中,***者是能够发起持续***的。并且,***者能够经过使用代理、修改设备特征等方式,规避WAF规则,尝试对WAF进行Bypass。
而若是是动态防护
以ShareWAF为例,在对抗暴力破解这一功能点上,采起的方式是彻底不一样的:
ShareWAF会对被破解的某个关键点,进行动态封装,好比:用户名。
具体而言:保护前,用户名在网页中常常是username之类的固定元素名称。暴力破解***者会用自动化的工具或脚本,自动对其赋值,而后发起请求、尝试登陆,反复进行此操做便是***过程。
ShareWAF会对username进行封装,并且是动态的,用户端发起访问请求获得的将再也不是username,每次获得的都是某个随机数符串。
这样,自动化的工具或脚本,就没法对关键的暴力破解点进行定位、赋值。***行为在前端就被终结。
ShareWAF的反爬虫也采用相似的理念。
【动态防护WAF编程实战】
前面是理论,接下来是实战,证实理论的可行性、演示如何在安全编程开发中应用动态防御技术。
将经过例程,分别演示ShareWAF的反自动化***、反爬虫功能的核心实现。
反自动化***
这里将经过一个例程,一个最简单的登陆页面,模拟ShareWAF如何利用动态防护技术对暴力破解这类自动化***进行防护。
登陆页而的关键内容,一般是这样的:
<form>
User:<input name="username"/>
Pass:<input name="password"/>
</form>
展示在浏览器端是一个简单的登陆页,提供用户名、密码输入,并进行登陆。
***者进行暴力破解时,可能采起的方式是:对username元素进行赋值,并发起登陆;或用Burp Suite等工具拦截数据并修改数据包进行枚举破解。
这里且再也不谈传统WAF的应对手段,直入主题,看ShareWAF是如何进行动态防护的。
例程代码只有几十行,展现最核心的"动态"概念。
这是一段NodeJS代码,实现了一个web服务,其中融入了ShareWAF的动态防护理念。
代码功能简单分析:
重点一:动态变形池,用于存放username和动态变形内容的对应关系;
重点二:在页面访问时,进行username元素动态变形、将变形对应关系存储到变形池,并将变形后的内容发送到浏览器端。这一步完成时,浏览器端本来一成不变的username元素将在每次访问或刷新时发生动态变化:
留意上方的name值,本来应该是username,而这时随机变化的字符串,两张图中name值是不一样的,事实上,每次都是不一样的。
假如***者本来采用自动化破解脚本:document.getElementById("username").value="***",这时将失效,由于username不见了,并且不可预见。
Burp Suite之类的数据包嗅探、截取、修改工具也失效了,由于关键字段username不见了。
动态防护的理念便是如此。固然,这并非所有,只是动态防护的一小部分应用。
重点3、动态变形过的username固然是须要还原的,不然将影响原有的业务功能。代码中的"变形池"存放的是username和"变形码(即:随机变形的字符串)"对应关系。经过对应关系,能够很轻松的还原回username,在WAF功能中,这时该将还原后的数据再转发给被保护网站,实现正常的业务流程。
如图:username已被还原:
反爬虫
前一个例子是应用了针对内容的动态防护,在反爬虫领域,动态防护又有所不一样。
爬虫有多种类型,下面要讲的反爬虫,准确的是说反内容爬虫,防止内容被爬取,也能够理解为防止网页内容被复制。
反内容爬虫,惯用的一种方式是进行字体加密,即便用自定义字体。
但通常来讲,自定义字体反爬容易被破解:***者获取字体后,很容易进行逆向分析,得出字码对应逻辑,进而还原出本来内容。ShareWAF的反内容爬虫,在自定义字体的基础上,加入了"动态"概念:
使字体成为动态路径、字体文件不可被下载。
这部分功能的实现,原理与以前相似,一样是在将数据发往浏览器以前先对特定的内容:字体路径,作动态变化处理,在收到请求时,再还原为原始正确路径,使文件可读取。
有一点特殊之处是:为了防止从网页源码中查看字体路径、下载字体文件,又对"动态"路径增长了访问时间限制、使用一次即失效功能。如此,达到了:加载网页时文件能够正常读取,但非法获取文件路径却不能打开的目的。
效果展现:
在这两张图中能够看到:字体路径是变化的、从浏览器打开文件地址,文件不能读取和下载。
使字体成为动态字体,防止逆向分析。
动态自定义字体技术,在ShareWAF中称其为:动态字体变码加密。
若是是传统的自定义字体加密,至关于一种密码技术,也相似于传呼台数字代码表:
即用某个或某几个数字,代替某个或某几个文字。
具体到网页文字内容加密反爬,是以下的效果:
也就是网页中显示正常的"文字",但在源码中实际并不存在,存在的是"文字"对应的密码字符。
这种文字,是不可复制的,总体复制网页中的文字时,"密码文字"部分将会缺失:
那么,爬虫也就没法复制、没法爬取内容。
这种技术的实现依赖于自定义字体,即网页源码中的css引入字体文件功能:
也就是须要引入自定义的字体文件。
自定义字体文件的相关知识不是本文的重点,在此略过。咱们的重点是实现"动态自定义自体文件"。
这样作的缘由是:
若是使用一个固定的自定义字体文件,字体和数字的对应关系是能够被分析得出的。如上面:
Ԕ;表示"我",ԕ;表示"你"等等。
为了防止被分析出对应关系,咱们须要对字体的加密码也进行动态处理。
在本例中,提供了一种方法,用于生成新的变码字体:
这是运行效果:
能够看到,出现了新的对应关系,与以前Ԕ;表示"我",ԕ;表示"你"是不一样的。
这样动态的改变字体编码,就能够防止文字和数字编码的对应关系被分析获取。
以上,即是ShareWAF动态防护技术在反自动化***、反爬虫场景中的应用。