当今数字化时代,表单安全是网络应用程序开发和数据保护中至关重要的一环。表单安全涉及保护用户提交的数据免受恶意攻击、数据泄露和滥用的风险。
随着互联网的发展,表单安全的重要性逐渐凸显。在过去,简单的HTML表单只能收集基本的用户输入信息,并且缺乏安全性保护措施。然而,随着网络黑客和恶意行为的增加,保护表单数据的安全性变得至关重要。
随着时间的推移,表单恶意攻击的技术在不断演化,而表单安全防护措施得到了不断的改进和加强。
本文以Drupal为例,介绍常用的表单防护措施,并做出一些对比。
总体而言,表单安全的防护,手段越靠前效果越明显,对整体资源的消耗越低。
本文的描述基于如下的一种比较常见经典的架构;如果是其他架构,本文亦可以作为参考,但是建议根据实际情况进行调整。
IP黑名单(ban/nginx/WAF)
通过访问日志,提交记录等数据,分析出来源的IP,然后通过屏蔽IP的方式禁止访问;从屏蔽的手段来说,可以分为如下几种
- 通过WAF等屏蔽
主流的WAF产品都提供了屏蔽IP的功能;需要管理员手工设置策略。好处是在WAF层进行了屏蔽,阻断了流量的向后传递,可以有效降低服务器的负载。
- nginx/apache等webserver上屏蔽;nginx或apache都提供了相关配置指令对IP进行屏蔽,可以屏蔽指定IP,或者通过cidr的方式屏蔽IP范围;资源消耗较低。
- 应用层屏蔽,这时候已经启动应用程序进行处理,资源消耗稍高;以Drupal为例,有如下手段:
- ban模块,内核自带,启用后可以在后台输入屏蔽的IP;缺点就是只能屏蔽指定的IP,不支持CIDR方式的IP范围屏蔽,另外就是不支持指定页面,只能全站限制。
- advban,内核ban模块的增强版,支持功能如下:地址范围(IPv4),屏蔽过期时间,手工解锁IP,自定义屏蔽文字。
-
- autoban,该模块依赖于系统watchdog表,根据表中的日志记录,按照指定规则进行屏蔽。
- access_filter模块,这是个第三方模块,需要手工安装配置安装;功能灵活强大,可以支持正则方式匹配路径,指定IP白名单、黑名单;有一定的上手成本。
- restrict_ip
- restrict_by_ip
- restrict_route_by_ip
验证码技术(Captcha)
这里指的是应用程序的验证码,随机生成一些随机文字,用户手工输入,匹配即可通过验证;有一些衍生出来的方式,例如简单的数学题,成语填写等;目前是广泛使用的屏蔽表单恶意访问的方式,缺点就是降低用户使用体验,使得信息录入速度降低
随着技术的发展,有些比较高级的攻击工具可以识别验证码并自动填写;所以一般情况下不单独使用验证码技术,而是混合几种手段屏蔽。
蜜罐技术(honeypot)
如果说图形验证码技术的策略是让人证明自己是人,那么蜜罐技术的策略就是让机器人证明自己是机器人。从另外一个角度进行屏蔽。
该技术的的主要原理,就是在表单上生成一些隐藏的表单元素,这些隐藏元素在正常浏览器渲染下不显示,正常用户使用不受影响;而对机器人来说,这些隐藏元素则是可见的,会触发提交,从而被系统检测到,进行屏蔽。
第三方验证码
有些第三方提供了图形验证码,背后结合大数据、AI分析等技术识别判断访问是否恶意;同时提供一些sdk方便和站点进行整合,如下是一些列表。有些服务器需要付费,可以根据情况灵活选择。
https://www.drupal.org/project/recaptcha_v3
https://www.drupal.org/project/cleantalk
https://www.drupal.org/project/tencentcloud_captcha
https://www.drupal.org/project/turnstile
限制IP的提交频率
该方式在于通过限制单位时间内对系统的访问速率,从而控制恶意访问提交的影响;使用需要比较小心,不要影响到正常用户的访问行为,因此在配置方面最好可以限制路径。在实现方式上,具有如下方式:
webserver(nginx/apache)层处理
该处理方式只有通过校验的流量会传递到后台,节约服务器资源。
应用层屏蔽
protect_form_flood_control,该模块对Drupal所有表单生效,例如用户登录注册表单,webform生成的表单,以及使用Drupal FormAPI构建的表单。
ddos_security,该模块通过对页面的访问统计,结合Drupal的flood API进行控制;使用的时候充分进行验证,通知注意别把自己的常用IP进行屏蔽。
其他
- webform字段配置验证,webform可通过UI的方式灵活配置字段,可以对字段设置唯一性校验以及正则表达式校验。
- webform_spam_words,可以针对指定的关键词进行校验屏蔽
总结
从实践来看,在不借助一些强力的WAF以及第三方校验码的情况下,单一的手段很难屏蔽恶意表单提交;因此建议根据实际情况进行灵活选择多种方式进行屏蔽。
另外有些前端js的校验技术,该校验只能对基于浏览器的访问,触发js执行的恶意攻击行为进行屏蔽;而大多数情况下,恶意攻击的来源为机器人提交,不会触发js的处理逻辑,使得基于js的客户端校验失效。