本项目由ModSecurity和Fastly的研究人员共同创建,旨在为WAF规则提供严格的测试。它使用OWASP核心规则集V3作为基线,在WAF上测试规则。规则集中的每条规则都被加载到一个YAML文件中,该文件会发出触发这些规则的HTTP请求。
目标/使用场景包括:
git clone [email protected]:fastly/ftw.gitcd ftwapt-get install python-pippip install -r requirements.txtpy.test test/test_default.py --ruledir test/yaml如果你需要一个测试WAF规则的环境,这里有一个已用Apache、Modsecurity和OWASP核心规则集3.0.0版本创建好的环境。可以通过以下方式部署:
git clone https://github.com/fastly/waf_testbed.gitvagrant uppy.test test/test_default.py --ruledir=test/yaml --destaddr=domain.com --port 443 --protocol httpspy.test test/integration/test_logcontains.py -s --ruledir=test/integration/*.py文件,包含必要的导入,示例见test/integration/test_logcontains.pytest*开头的函数将被py.test运行,因此请创建一个函数def test_somewafLogChecker的类get_logs()函数。FTW会在运行测试后调用此函数,并设置self.start和self.end的日期时间get_logs()返回py.test fixtures。使用函数装饰器@pytest.fixture,返回你的新LogChecker对象。当你在测试中使用与@pytest.fixture名称匹配的函数参数时,它会实例化你的对象,使运行测试更容易。第1步中的Python文件中有一个示例。虽然推荐使用YAML格式发送请求,但自动化测试通常需要发送大量动态请求。在这种情况下,建议使用py.test框架来生成可以作为整体一部分运行的测试用例。 通常发送HTTP请求很简单:
HttpUA()类的实例Input()类的实例,并提供你不想使用默认值的任何参数HttpUA.send_request()有关示例,请参阅http集成测试
test/integration/LOGCONTAINSFIXTURE.yaml中的格式编写*.yaml格式的测试配置,log_contains行需要一个正则表达式字符串。FTW会将YAML文件中每个阶段的log_contains字符串编译成正则表达式。然后,该正则表达式将与从get_logs()传入的日志行一起使用,以查找匹配项。因此,log_contains字符串应该是唯一的规则ID,因为FTW是贪婪的,会传递第一个匹配项。从传递给LogChecker对象的开始/结束时间可以减轻误报,但最好还是使用唯一的正则表达式以确保安全。get_logs()函数,因此如果通过API检索日志,请务必考虑API调用。