searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Web应用防火墙脱敏功能测试中,模拟源站的两种方法

2023-09-07 01:43:54
13
0

概述

        防敏感信息泄漏是Web应用防火墙针对网安法明确提出,企业运营者应当采取技术措施和其他必要措施,确保个人信息安全,防止信息泄露、毁损、丢失。在发生或者可能发生个人信息泄露、毁损、丢失的情况时,应当立即采取补救措施,按照规定及时告知用户并向有关主管部门报告。防敏感信息泄漏功能针对站点中存在的敏感信息(尤其是手机号、***、***等信息)泄漏、敏感词汇泄露提供脱敏和告警措施,并支持拦截指定的HTTP状态码。

测试痛点

防敏感信息泄露功能支持的:
* 响应页面中手机号、银行卡、身份证号码、敏感词汇等;
* Content-Type包括text/*、image/*、application/*;
* 特定URL页面中的敏感信息过滤;
* 特定的HTTP请求状态码;
Web应用防火墙防泄漏的类型非常多,测试过程中难以通过某一特定站点进行模拟验证。因此,如果可以手动搭建特定的HTTP服务便可以很好的解决以上问题。

python HTTP服务

当需要对GET、POST请求的响应正文、响应状态码、响应头进行脱敏验证时,可按照如下方法进行配置:
    * 响应正文
    构造Content-type对应的response
    * 响应状态码
    通过self.send_response(status_code),设置预期的状态码
    * 响应头
    通过self.send_header('Content-type', 'application/json'),设置预期的Content-type类型

示例如下:

class DemoRequestHandler(SimpleHTTPRequestHandler):
    def do_GET(self):
        # set resp header
        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()

        # set resp body
        response = {"phone":"18812194311","card":"6222031284992747551","mail":"m182381818@qq.com","id":"510101199409038763"}
        response_json = json.dumps(response)
        self.wfile.write(response_json.encode())

if __name__ == '__main__':
    from http.server import HTTPServer
    # set httpserver port
    server_address = ('', 10000)
    httpd = HTTPServer(server_address, DemoRequestHandler)
    httpd.serve_forever()

 

nginx服务

        nginx作为一款非常有名的Web服务器和代理服务器,可以帮助测试中模拟多种真实服务器的场景。可根据具体场景,选取相关功能进行配置:

设置虚拟服务器

在nginx配置文件server指令中,用于定义一个虚拟服务器。server配置块通常包含一个listen指令,用于侦听请求的服务器的IP地址和端口。可接受IPv4与IPv6地址。示例如下:

server {
    listen 127.0.0.1:8080;
    # The rest of server configuration
}

访问不同的URL,返回特定内容

当需要根据不同URL返回对应相应内容时,可以通过配置location区段实现。location 区段应用于网站特定的URI位置,该区段能够用于server区段中,也能嵌套在其他location中。示例,返回固定的文本和json,都是在server中配置location拦截即可:

# 固定文本:
location ~ ^/get_text {
    default_type text/html;
    return 200 'This is text!';  
}

# 固定json:
location ~ ^/get_json {
    default_type application/json;
    return 200 '{"status":"success","result":"nginx json"}';
}

location 指令说明:

~ : 表示uri包含正则表达式,且区分大小写。
~* : 表示uri包含正则表达式,且不区分大小写。
= : 表示uri不含正则表达式,要求严格匹配。

* 由于Linux下采用的是utf-8的字符编码,默认情况下返回中文的话浏览器用gbk来解析utf-8编码,显然会出现乱码,这时要在nginx location块中主动添加header来输出正确编码,例如:add_header Content-Type 'text/html; charset=utf-8'。

添加或修改HTTP响应头

当需要修改HTTP响应头时,可以使用nginx的add_header指令。示例如下:

server {
  listen 80;
  server_name your_domain.com;

  location / {
    add_header X-Custom-Header "Hello, World!";
    add_header X-Powered-By Nginx;
    add_header Cache-Control no-store;
    # 其他配置...
  }
}

每个add_header指令包含一个名称和值,上面我们添加了三个自定义的响应头字段:X-Custom-Header,X-Powered-By和Cache-Control。

删除HTTP响应头

当某些场景下需要从响应头中删除某些特定的字段,可以使用nginx中proxy_hide_header或fastcgi_hide_header指令,示例如下:

server {
  listen 80;
  server_name your_domain.com;

  location / {
    proxy_pass ws://backend;
    proxy_hide_header X-Powered-By;
    # 其他配置...
  }
}

返回特定状态码

当需要模拟某些URI立即返回带有特定错误或重定向代码的响应时,可使用return返回特定状态码,示例如下:

location /wrong/url {
    return 404;
}

return的第一个参数时响应码,第二个可选参数是重定向的URL或要在响应正文中返回的文本。

总结

以上,可模拟作为脱敏检测的对应服务器。欢迎大家指正,如有其他更好的方法可以和大家一起交流。

 

0条评论
0 / 1000
张****伟
1文章数
0粉丝数
张****伟
1 文章 | 0 粉丝