1

我可以使用一些关于将 modsecurity 似乎抱怨的 JSON ARGS_NAMES 列入白名单的建议。我不确定如何为 JSON 请求正确指定 ARGS_NAMES。我的应用大量使用 JSON,因此有一些针对不同样式请求的警报。

以下警报由对我的后端应用程序的 POST 请求(登录/身份验证)触发:

2015-08-06T23:02:21.09022 [Thu Aug 06 23:02:21.090206 2015] [:error] [pid > 18099:tid 140155981653760] [client 192.168.216.16] ModSecurity:警告。> 模式匹配 "(?i:(?:union\\s*?(?:all|distinct|[(!@] ?)?\\s ?[([] ? \\s ?select\\s+) |(?:\\w+\\s+like\\s+> [\"' \\xc2\\xb4\\xe2\\x80\\x99\\xe2\\x80\\x98])|(?:like\\\\s*? [\\"'\xc2\xb4\xe2\x80\x99\xe2\x80\x98]\\%)|(?: [\"'\\xc2\\xb4\\xe2\\x80\\x99\\xe2\\x80\\x98]\\\\s*?like\\\\W*? [\\"'\xc2\xb4 ..." 在 ARGS_NAMES: {"username":"userid2","password":"blahblah"}. [file "/etc/apache2/modsecurity-crs/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"] [行"223"] [id "981245"] [msg "检测基本 SQL 身份验证绕过尝试 2/3"] [data "匹配数据:\x22:\x22userid2\x22,\x22p 在 ARGS_NAMES 中找到:{\x22username\x22: \x22userid2\x22,\x22password\x22:\x22blahblah\x22 }:{\x22username\x22:\x22userid2\x22,\x22password\x22:\x22blahblah\x22 }"] [严重性“CRITICAL”] [标记“OWASP_CRS/ WEB_ATTACK/SQL_INJECTION"][主机名"api.host.name"] [uri"/user-api/auth-service"] [unique_id"VcPnfQobAhEAAEazjWUAAABB"]

这是另一个由 AJAX 更新用户会话数据触发的警报:

2015-07-22T22:02:03.61377 [2015 年 7 月 22 日星期三 22:02:03.613737] [:error] [pid > 14702:tid 140281273739008] [client 10.72.2.5] ModSecurity: Access denied > with code 403 (phase 2) . TX:981257 处的模式匹配“(.*)”-检测 MySQL > 注释-/空格-混淆注入和反引号终止-OWASP_CRS/WEB_ATTACK/SQLI-ARGS_NAMES:{"data":{"categories": [{"uuid" :"10009","name":"Books","folder":"School"}],"category_ids":["188"],"transaction_ids":["ed529b9f47ee-ab23-5b98-4404-d59a86b9", "ed529b9f47ee-ab23-5b98-4404-d59a86b9","ed529b9f47ee-ab23-5b98-4404-d59a86b9"]}}。[文件“/etc/apache2/modsecurity-crs/activated_rules/modsecurity_crs_49_inbound_blocking.conf”][行“26”][id”

如何为 "ARGS_NAMES:{"username[..]" 或 "ARGS_NAMES:{data[..]" 创建白名单?当我尝试使用正则表达式加入白名单时,我会得到如下规则:

SecRule ARGS_NAMES:"({\"(data)\":)(({\"[a-z_]+\":). )" "(. )" "id:308,phase:2,t:none ,nolog,pass,ctl:ruleRemoveTargetByTag=. ;ARGS_NAMES:({\"(data)\":)(({\"[a-z_]+\":). )"

我相信这有效,除非超出 PCRE 限制,从测试。对于 JSON 参数,是否有更简单的方法来执行此操作?

这是我在早期的白名单迭代中尝试的另一种方法:

SecRule ARGS:data.transaction_ids "(([a-z0-9-]) )" "id:206,phase:2,nolog,pass,ctl:ruleRemoveTargetByTag=. ;ARGS:data.transaction_ids,ctl:ruleRemoveTargetById=960024 ;ARGS:data.transaction_ids"

据我所知,这是可行的,但我希望能够将任何在请求正文中使用“{data:”JSON 格式的请求列入白名单。在进行另一轮测试之前,我想验证将 JSON 参数列入白名单的正确方法。

我在这里想念什么?

4

0 回答 0