热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ModSecurity3未进入requestbody检查阶段

环境: Cen

环境:



 Centos7 ModSecurityV3.0.4 Nginx1.19-7 ModSecurity-NginxV1.0.1

问题:



ModSecurity没有对 request body进行检查。

配置文件 如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# -- Rule engine initialization ----------------------------------------------                                                    



# Enable ModSecurity, attaching it to every transaction. Use detection

# only to start with, because that minimises the chances of post-installation

# disruption.

#

SecRuleEngine On





# -- Request body handling ---------------------------------------------------



# Allow ModSecurity to access request bodies. If you don't, ModSecurity

# won't be able to see any POST parameters, which opens a large security

# hole for attackers to exploit.

#

SecRequestBodyAccess On





SecDefaultAction "phase:1,pass,log,tag:'Local Lab Service'"

SecDefaultAction "phase:2,pass,log,tag:'Local Lab Service'"



# Enable XML request body parser.

# Initiate XML Processor in case of xml content-type

#

SecRule REQUEST_HEADERS:Content-Type "(?:application(?:/soap\+|/)|text/)xml" \

     "id:'200000',phase:1,t:none,t:lowercase,pass,nolog,ctl:requestBodyProcessor=XML"



# Enable JSON request body parser.

# Initiate JSON Processor in case of JSON content-type; change accordingly

# if your application does not use 'application/json'

#

SecRule REQUEST_HEADERS:Content-Type "application/json" \

     "id:'200001',phase:1,t:none,t:lowercase,pass,nolog,ctl:requestBodyProcessor=JSON"



# Maximum request body size we will accept for buffering. If you support

# file uploads then the value given on the first line has to be as large

# as the largest file you are willing to accept. The second value refers

# to the size of data, with files excluded. You want to keep that value as

# low as practical.

#

SecRequestBodyLimit 13107200

SecRequestBodyNoFilesLimit 131072



# What to do if the request body size is above our configured limit.

# Keep in mind that this setting will automatically be set to ProcessPartial

# when SecRuleEngine is set to DetectionOnly mode in order to minimize

# disruptions when initially deploying ModSecurity.

#

SecRequestBodyLimitAction Reject



# Verify that we've correctly processed the request body.

# As a rule of thumb, when failing to process a request body

# you should reject the request (when deployed in blocking mode)

# or log a high-severity alert (when deployed in detection-only mode).

#

SecRule REQBODY_ERROR "!@eq 0" \

"id:'200002', phase:2,t:none,log,deny,status:400,msg:'Failed to parse request body.',logdata:'%{reqbody_error_msg}',severity:2"



# By default be strict with what we accept in the multipart/form-data

# request body. If the rule below proves to be too strict for your

# environment consider changing it to detection-only. You are encouraged

# _not_ to remove it altogether.

#

SecRule MULTIPART_STRICT_ERROR "!@eq 0" \

"id:'200003',phase:2,t:none,log,deny,status:400, \

msg:'Multipart request body failed strict validation: \

PE %{REQBODY_PROCESSOR_ERROR}, \

BQ %{MULTIPART_BOUNDARY_QUOTED}, \

BW %{MULTIPART_BOUNDARY_WHITESPACE}, \

DB %{MULTIPART_DATA_BEFORE}, \

DA %{MULTIPART_DATA_AFTER}, \

HF %{MULTIPART_HEADER_FOLDING}, \

LF %{MULTIPART_LF_LINE}, \

SM %{MULTIPART_MISSING_SEMICOLON}, \

IQ %{MULTIPART_INVALID_QUOTING}, \

IP %{MULTIPART_INVALID_PART}, \

IH %{MULTIPART_INVALID_HEADER_FOLDING}, \

FL %{MULTIPART_FILE_LIMIT_EXCEEDED}'"



# See #1747 and #1924 for further information on the possible values for

# MULTIPART_UNMATCHED_BOUNDARY.

#

SecRule MULTIPART_UNMATCHED_BOUNDARY "@eq 1" \

    "id:'200004',phase:2,t:none,log,deny,msg:'Multipart parser detected a possible unmatched boundary.'"





# PCRE Tuning

# We want to avoid a potential RegEx DoS condition

#

SecPcreMatchLimit 1000

SecPcreMatchLimitRecursion 1000



# Some internal errors will set flags in TX and we will need to look for these.

# All of these are prefixed with "MSC_".  The following flags currently exist:

#

# MSC_PCRE_LIMITS_EXCEEDED: PCRE match limits were exceeded.

#

SecRule TX:/^MSC_/ "!@streq 0" \

        "id:'200005',phase:2,t:none,deny,msg:'ModSecurity internal error flagged: %{MATCHED_VAR_NAME}'"





# -- Response body handling --------------------------------------------------



# Allow ModSecurity to access response bodies.

# You should have this directive enabled in order to identify errors

# and data leakage issues.

#

# Do keep in mind that enabling this directive does increases both

# memory consumption and response latency.

#

SecResponseBodyAccess Off



# Which response MIME types do you want to inspect? You should adjust the

# configuration below to catch documents but avoid static files

# (e.g., images and archives).

#

SecResponseBodyMimeType text/plain text/html text/xml



# Buffer response bodies of up to 512 KB in length.

SecResponseBodyLimit 524288



# What happens when we encounter a response body larger than the configured

# limit? By default, we process what we have and let the rest through.

# That's somewhat less secure, but does not break any legitimate pages.

#

SecResponseBodyLimitAction ProcessPartial



SecTmpDir /opt/waf/modsecurity/var/tmp



# The location where ModSecurity will keep its persistent data.  This default setting

# is chosen due to all systems have /tmp available however, it

# too should be updated to a place that other users can't access.

#

SecDataDir /opt/waf/modsecurity/var/data





# -- File uploads handling configuration -------------------------------------



# The location where ModSecurity stores intercepted uploaded files. This

# location must be private to ModSecurity. You don't want other users on

# the server to access the files, do you?

#

SecUploadDir /opt/waf/modsecurity/var/upload/



# By default, only keep the files that were determined to be unusual

# in some way (by an external inspection script). For this to work you

# will also need at least one file inspection rule.

#

SecUploadKeepFiles Off



# Uploaded files are by default created with permissions that do not allow

# any other user to access them. You may need to relax that if you want to

# interface ModSecurity to an external program (e.g., an anti-virus).

#

SecUploadFileMode 0600





# -- Debug log configuration -------------------------------------------------



# The default debug log configuration is to duplicate the error, warning

# and notice messages from the error log.

#

SecDebugLog /opt/waf/modsecurity/var/log/debug.log

SecDebugLogLevel 9



# -- Audit log configuration -------------------------------------------------



# Log the transactions that are marked by a rule, as well as those that

# trigger a server error (determined by a 5xx or 4xx, excluding 404,  

# level response status codes).

#

SecAuditEngine On

SecAuditLogRelevantStatus "^(?:5|4(?!04))"



# Log everything we know about a transaction.

SecAuditLogParts ABCDEFIJHZ



# Use a single file for logging. This is much easier to look at, but

# assumes that you will use the audit log only ocassionally.

#

SecAuditLogType Serial

SecAuditLog /opt/waf/modsecurity/var/audit/audit.log



# Specify the path for concurrent audit logging.

SecAuditLogStorageDir /opt/waf/modsecurity/var/audit/





# -- Miscellaneous -----------------------------------------------------------



# Use the most commonly used application/x-www-form-urlencoded parameter

# separator. There's probably only one application somewhere that uses

# something else so don't expect to change this value.

#

SecArgumentSeparator &



# Settle on version 0 (zero) COOKIEs, as that is what most applications

# use. Using an incorrect COOKIE version may open your installation to

# evasion attacks (against the rules that examine named COOKIEs).

#

SecCOOKIEFormat 0



# Specify your Unicode Code Point.

# This mapping is used by the t:urlDecodeUni transformation function

# to properly map encoded data to your language. Properly setting

# these directives helps to reduce false positives and negatives.

#

SecUnicodeMapFile unicode.mapping 20127



# Improve the quality of ModSecurity by sharing information about your

# current ModSecurity version and dependencies versions.

# The following information will be shared: ModSecurity version,

# Web Server version, APR version, PCRE version, Lua version, Libxml2

# version, Anonymous unique id for host.

SecStatusEngine On

进行如下请求

1
curl -d "name=tom&password=123" http://localhost

1
2
3
4
5
6
7
8
POST / HTTP/1.1

User-Agent: curl/7.29.0

Host: localhost:8080

Accept: */*

Content-Length: 21

Content-Type: application/x-www-form-urlencoded



name=tom&password=123

debug日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[1617093957] [] [4] Initializing transaction

[1617093957] [] [4] Transaction context created.

[1617093957] [] [4] Starting phase CONNECTION. (SecRules 0)

[1617093957] [] [9] This phase consists of 0 rule(s).

[1617093957] [] [4] Starting phase URI. (SecRules 0 + 1/2)

[1617093957] [/] [4] Starting phase REQUEST_HEADERS.  (SecRules 1)

[1617093957] [/] [9] This phase consists of 2 rule(s).

[1617093957] [/] [4] (Rule: 200000) Executing operator "Rx" with param "(?:application(?:/soap\+|/)|text/)xml" against REQUEST_HEADERS:Content-Type.

[1617093957] [/] [9]  T (0) t:lowercase: "application/x-www-form-urlencoded"

[1617093957] [/] [9] Target value: "application/x-www-form-urlencoded" (Variable: REQUEST_HEADERS:Content-Type)

[1617093957] [/] [4] Rule returned 0.

[1617093957] [/] [9] Matched vars cleaned.

[1617093957] [/] [4] (Rule: 200001) Executing operator "Rx" with param "application/json" against REQUEST_HEADERS:Content-Type.

[1617093957] [/] [9]  T (0) t:lowercase: "application/x-www-form-urlencoded"

[1617093957] [/] [9] Target value: "application/x-www-form-urlencoded" (Variable: REQUEST_HEADERS:Content-Type)

[1617093957] [/] [4] Rule returned 0.

[1617093957] [/] [9] Matched vars cleaned.

[1617093957] [/] [4] Starting phase RESPONSE_HEADERS. (SecRules 3)

[1617093957] [/] [9] This phase consists of 0 rule(s).

[1617093957] [/] [9] Appending response body: 27 bytes. Limit set to: 524288.000000

[1617093957] [/] [4] Starting phase RESPONSE_BODY. (SecRules 4)

[1617093957] [/] [4] Response body is disabled, returning... 1

[1617093957] [/] [4] Starting phase LOGGING. (SecRules 5)

[1617093957] [/] [9] This phase consists of 0 rule(s).

[1617093957] [/] [8] Checking if this request is suitable to be saved as an audit log.

[1617093957] [/] [8] Checking if this request is relevant to be part of the audit logs.

[1617093957] [/] [5] Saving this request as part of the audit logs.

[1617093957] [/] [8] Request was relevant to be saved. Parts: 6014

审计日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
---WLT7wZWS---A--

[30/Mar/2021:16:45:57 +0800] 1617093957 127.0.0.1 53020 127.0.0.1 80

---WLT7wZWS---B--

POST / HTTP/1.1

User-Agent: curl/7.29.0

Host: localhost

Accept: */*

Content-Length: 21

Content-Type: application/x-www-form-urlencoded



---WLT7wZWS---D--



---WLT7wZWS---E--

Thank you for requesting /\x0a



---WLT7wZWS---F--

HTTP/1.1 200

Server: nginx/1.19.7

Date: Tue, 30 Mar 2021 08:45:57 GMT

Content-Length: 27

Content-Type: text/plain

Connection: keep-alive



---WLT7wZWS---H--



---WLT7wZWS---I--



---WLT7wZWS---J--



---WLT7wZWS---Z--

请求报文有请求体,且开启请求体检查,但Modsecurity没有对请求体的任何处理。



   



推荐阅读
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • phpcomposer 那个中文镜像是不是凉了 ... [详细]
author-avatar
他给我留下的美好_813
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有