Băng nhóm Sữa Lắc lại tiếp tục tấn công ứng dụng của bạn. Chúng đã thay đổi cách tấn công một lần nữa! Bạn cần phải cập nhật rule để chặn các request xấu xa này trong khi vẫn cho phép khách hàng thực sự gửi request.
Tất cả WAF Rule được định nghĩa là một JSON Object. Đối với các rule phức tạp, bạn sẽ dễ dàng xử lý hơn nếu làm việc trực tiếp ở định dạng JSON thay vì sử dụng Rule Editor trên console. Bạn có thể lấy các thông tin của rule hiện tại được định nghĩa bằng JSON thông qua sử dụng bằng API, CLI hoặc Console sử dụng lệnh get-rule-group. Chỉnh sửa chúng sử dụng trình biên soạn JSON mà bạn muốn và tải chúng lên với lệnh update-rule-group sử dụng API, CLI hoặc Console.
Định nghĩa rule sử dụng JSON cho phép bạn áp dụng việc quản lý phiên bản nhằm dễ dàng xem xét cách thức, thời điểm và lý do một tập các rule phức tạp được thay đổi.




x-milkshake: chocolate và header x-favourite-topping: nutsparameter milkshake=banana và query parameter favourite-topping=sauce{
"Name": "complex-rule-challenge",
"Priority": 3,
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "complex-rule-challenge"
},
"Statement": {
"OrStatement": {
"Statements": [
{
"AndStatement": {
"Statements": [
{
"ByteMatchStatement": {
"FieldToMatch": {
"SingleHeader": {
"Name": "x-milkshake"
}
},
"PositionalConstraint": "EXACTLY",
"SearchString": "chocolate",
"TextTransformations": [
{
"Type": "NONE",
"Priority": 3
}
]
}
},
{
"ByteMatchStatement": {
"FieldToMatch": {
"SingleHeader": {
"Name": "x-favourite-topping"
}
},
"PositionalConstraint": "EXACTLY",
"SearchString": "nuts",
"TextTransformations": [
{
"Type": "NONE",
"Priority": 3
}
]
}
}
]
}
},
{
"AndStatement": {
"Statements": [
{
"ByteMatchStatement": {
"FieldToMatch": {
"SingleQueryArgument": {
"Name": "milkshake"
}
},
"PositionalConstraint": "EXACTLY",
"SearchString": "banana",
"TextTransformations": [
{
"Type": "NONE",
"Priority": 3
}
]
}
},
{
"ByteMatchStatement": {
"FieldToMatch": {
"SingleQueryArgument": {
"Name": "favourite-topping"
}
},
"PositionalConstraint": "EXACTLY",
"SearchString": "sauce",
"TextTransformations": [
{
"Type": "NONE",
"Priority": 3
}
]
}
}
]
}
}
]
}
}
}

# This will be allowed
curl -H "x-milkshake: chocolate" "<Your Juice Shop URL>"
Lệnh này sẽ cho phép chúng ta truy cập vào web

# This will be allowed
curl "<Your Juice Shop URL>?milkshake=banana"
Lệnh này sẽ cho phép chúng ta truy cập vào web

# This will be blocked
curl -H "x-milkshake: chocolate" -H "x-favourite-topping: nuts" "<Your Juice Shop URL>"
Lệnh này sẽ bị chặn

# This will be blocked
curl "<Your Juice Shop URL>?milkshake=banana&favourite-topping=sauce"
Lệnh này sẽ bị chặn

Ở phần này, bạn đã hiểu được cách để định nghĩa WAF rule ở định dạng JSON. Các logic phức tạp cần phải được định nghĩa sử dụng các toán tử AND, OR và NOT.