手工测试过程:

  手工测试过程其实也非常简单:

  首先准备测试工具:

  1、能够发送GET(自定义URL参数和Request Header)和POST(自定义URL参数,Form Data, Upload FileData, Request Header)请求的HTML文件。

  2、后端JBoss上的Servlet,负责将请求发送过来的所有数据通过Response返回回浏览器,便于测试时的请求数据验证。

  其次通过浏览器加载HTML文件并设置测试点之后发送请求,不断刷新访问触发拦截规则,观察每次经过“等待页面”模块处理,跳转到页面后重新触发浏览器执行用户请求及后触发失败页面的前后请求数据是否一致,流程是否正常。

  测试点包括正常逻辑,异常逻辑,空数据,特殊字符,XSS攻击字符等

  bug汇总分析:

  本次测试共发现7处bug,2处风险点,鉴于安全考虑,此处总结几处典型的BUG,风险点咱不说了。

  1、经过“等待页面”模块处理之后,POST请求所携带的URL参数丢失问题:

  该问题是由于模块在处理POST请求的数据存储时,没正确保存数据长度,导致数据遗失;

  2、POST的表单数据,携带特殊字符,如<,>,/,&等,经过“等待页面”模块处理之后,转译错误,如转译后的字符不完整,转译后的字符经过第二次模块处理之后,再次转译:

  该问题是由于模块的转译代码1. 在转译之后没正确保存转译数据长度;2. 没正确区分转译内容,导致多次转译;

  3、POST的表单数据,携带特殊字符,如空格,中文等,经过“等待页面”模块处理之后,出现编码错误,如第一次经过模块处理后,空格边encode成“+”,第二次经过模块处理后,继续encode“+”成为“%2B”,导致后后端Server接收并deconde得到的数据是“+”而不是初的空格;

  该问题是由于模块的encode代码,使用了错误的参数设置,正确的做法是:ngx_unescape_uri函数调用时设置参数 NGX_UNESCAPE_WWW_FORM

  4、对不支持的POST数据,直接丢弃POST Data 并强制转换content type为application/x-www-form-urlencoded:

  该问题是由于模块对于不支持的POST数据,采用粗暴的处理方案导致的。