@@ -124,7 +124,9 @@ def test_responses_dataguard_alarm(
124
124
print ("------------- Run test for AP policy: dataguard-alarm --------------" )
125
125
print (f"Request URL: { backend_setup .req_url } and Host: { backend_setup .ingress_host } " )
126
126
127
- ensure_response_from_backend (backend_setup .req_url , backend_setup .ingress_host , check404 = True )
127
+ ensure_response_from_backend (
128
+ backend_setup .req_url , backend_setup .ingress_host , check404 = True
129
+ )
128
130
129
131
print ("----------------------- Send valid request ----------------------" )
130
132
resp_valid = requests .get (
@@ -156,7 +158,9 @@ def test_responses_file_block(
156
158
print ("------------- Run test for AP policy: file-block --------------" )
157
159
print (f"Request URL: { backend_setup .req_url } and Host: { backend_setup .ingress_host } " )
158
160
159
- ensure_response_from_backend (backend_setup .req_url , backend_setup .ingress_host , check404 = True )
161
+ ensure_response_from_backend (
162
+ backend_setup .req_url , backend_setup .ingress_host , check404 = True
163
+ )
160
164
161
165
print ("----------------------- Send valid request ----------------------" )
162
166
resp_valid = requests .get (
@@ -188,7 +192,9 @@ def test_responses_malformed_block(
188
192
print ("------------- Run test for AP policy: malformed-block --------------" )
189
193
print (f"Request URL: { backend_setup .req_url } and Host: { backend_setup .ingress_host } " )
190
194
191
- ensure_response_from_backend (backend_setup .req_url , backend_setup .ingress_host , check404 = True )
195
+ ensure_response_from_backend (
196
+ backend_setup .req_url , backend_setup .ingress_host , check404 = True
197
+ )
192
198
193
199
print ("----------------------- Send valid request with no body ----------------------" )
194
200
headers = {"host" : backend_setup .ingress_host }
@@ -220,7 +226,12 @@ def test_responses_malformed_block(
220
226
221
227
@pytest .mark .parametrize ("backend_setup" , [{"policy" : "csrf" }], indirect = True )
222
228
def test_responses_csrf (
223
- self , kube_apis , ingress_controller_endpoint , crd_ingress_controller_with_ap , backend_setup , test_namespace
229
+ self ,
230
+ kube_apis ,
231
+ ingress_controller_endpoint ,
232
+ crd_ingress_controller_with_ap ,
233
+ backend_setup ,
234
+ test_namespace ,
224
235
):
225
236
"""
226
237
Test CSRF (Cross Site Request Forgery) AppProtect policy: Block requests with invalid/null/non-https origin-header
@@ -229,13 +240,19 @@ def test_responses_csrf(
229
240
print (f"Request URL without CSRF protection: { backend_setup .req_url } " )
230
241
print (f"Request URL with CSRF protection: { backend_setup .req_url_2 } " )
231
242
232
- ensure_response_from_backend (backend_setup .req_url_2 , backend_setup .ingress_host , check404 = True )
243
+ ensure_response_from_backend (
244
+ backend_setup .req_url_2 , backend_setup .ingress_host , check404 = True
245
+ )
233
246
234
247
print ("----------------------- Send request with http origin header ----------------------" )
235
248
236
249
headers = {"host" : backend_setup .ingress_host , "Origin" : "http://appprotect.example.com" }
237
- resp_valid = requests .post (backend_setup .req_url , headers = headers , verify = False , cookies = {"flavor" : "darkchoco" })
238
- resp_invalid = requests .post (backend_setup .req_url_2 , headers = headers , verify = False , cookies = {"flavor" : "whitechoco" })
250
+ resp_valid = requests .post (
251
+ backend_setup .req_url , headers = headers , verify = False , cookies = {"flavor" : "darkchoco" }
252
+ )
253
+ resp_invalid = requests .post (
254
+ backend_setup .req_url_2 , headers = headers , verify = False , cookies = {"flavor" : "whitechoco" }
255
+ )
239
256
240
257
print (resp_valid .text )
241
258
print (resp_invalid .text )
@@ -246,3 +263,74 @@ def test_responses_csrf(
246
263
assert invalid_resp_title in resp_invalid .text
247
264
assert invalid_resp_body in resp_invalid .text
248
265
assert resp_invalid .status_code == 200
266
+
267
+ @pytest .mark .parametrize ("backend_setup" , [{"policy" : "ap-user-def-browser" }], indirect = True )
268
+ def test_responses_user_def_browser (
269
+ self ,
270
+ crd_ingress_controller_with_ap ,
271
+ backend_setup ,
272
+ ):
273
+ """
274
+ Test User defined browser AppProtect policy: Block requests from built-in and user-defined browser based on action in policy.
275
+ """
276
+ print ("------------- Run test for AP policy: User Defined Browser --------------" )
277
+ print (f"Request URL: { backend_setup .req_url } " )
278
+
279
+ ensure_response_from_backend (
280
+ backend_setup .req_url , backend_setup .ingress_host , check404 = True
281
+ )
282
+
283
+ print ("----------------------- Send request with User-Agent: browser ----------------------" )
284
+
285
+ headers_firefox = {
286
+ "host" : backend_setup .ingress_host ,
287
+ "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/59.0" ,
288
+ }
289
+ resp_firefox = requests .get (backend_setup .req_url , headers = headers_firefox , verify = False )
290
+ headers_chrome = {
291
+ "host" : backend_setup .ingress_host ,
292
+ "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Chrome/76.0.3809.100" ,
293
+ }
294
+ resp_chrome = requests .get (backend_setup .req_url_2 , headers = headers_chrome , verify = False )
295
+ headers_safari = {
296
+ "host" : backend_setup .ingress_host ,
297
+ "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Safari/537.36" ,
298
+ }
299
+ resp_safari = requests .get (backend_setup .req_url_2 , headers = headers_safari , verify = False )
300
+ headers_custom1 = {
301
+ "host" : backend_setup .ingress_host ,
302
+ "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 custombrowser1/0.1" ,
303
+ }
304
+ resp_custom1 = requests .get (backend_setup .req_url_2 , headers = headers_custom1 , verify = False )
305
+ headers_custom2 = {
306
+ "host" : backend_setup .ingress_host ,
307
+ "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 custombrowser2/0.1" ,
308
+ }
309
+ resp_custom2 = requests .get (backend_setup .req_url_2 , headers = headers_custom2 , verify = False )
310
+
311
+ assert (
312
+ 200
313
+ == resp_firefox .status_code
314
+ == resp_chrome .status_code
315
+ == resp_safari .status_code
316
+ == resp_custom1 .status_code
317
+ == resp_custom2 .status_code
318
+ )
319
+ assert (
320
+ valid_resp_addr in resp_firefox .text
321
+ and valid_resp_addr in resp_safari .text
322
+ and valid_resp_addr in resp_custom2 .text
323
+ )
324
+ assert (
325
+ valid_resp_name in resp_firefox .text
326
+ and valid_resp_name in resp_safari .text
327
+ and valid_resp_name in resp_custom2 .text
328
+ )
329
+ assert (
330
+ invalid_resp_title in resp_chrome .text and
331
+ invalid_resp_title in resp_custom1 .text
332
+ )
333
+ assert (
334
+ invalid_resp_body in resp_chrome .text and
335
+ invalid_resp_body in resp_custom1 .text
336
+ )
0 commit comments