我想使用 haproxy(1.7.5-2 2017/05/17,debian stretch stock)作为防御某些可能攻击(例如 SQL 注入)的第一道防线。我的想法是在前端创建一个使用正则表达式检测不需要的模式的 acl,然后在这种情况下使用始终失败的虚拟后端。类似这样:
acl sql_injection url_reg -i -f /etc/haproxy/sqlinject.patterns
use_backend bad_request if sql_injection
问题是,如果 url 是 url 编码的,那么 egfoo.com/?select foo from bar
将被传输为foo.com/?select%20 foo%20from%20bar
,这实际上需要一个不同的正则表达式,因此匹配的正则表达式会不必要地宽泛。因此出现了 url_dec:
acl sql_injection url_reg,url_dec -i -f /etc/haproxy/sqlinject.patterns
但是,这似乎不起作用,因为它似乎没有匹配任何内容。即使我将其放入.*
模式文件,也没有匹配结果。
配置中没有语法错误,因为haproxy -c
没有返回任何警告或错误。我该如何匹配 urldecoded 查询字符串?
答案1
@michael-sqlbot 建议的变体似乎有效:
acl sql_injection url,url_dec -m reg -i -f /etc/haproxy/sqlinject.patterns
因此,以上似乎是 haproxy 的错误,无论是在配置验证还是解释中。