[
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (normal)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "280",
        "Content-Type": "multipart/form-data; boundary=0000",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"name\"\r\n",
        "\r\n",
        "Brian Rectanus\r\n",
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"email\"\r\n",
        "\r\n",
        "brian.rectanus@breach.com\r\n",
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r\n",
        "Content-Type: image/jpeg\r\n",
        "\r\n",
        "BINARYDATA\r\n",
        "--0000--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Added file part to the list: name \"image\" file name \"image.jpg\" \\(offset 258, length 10\\)",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRequestBodyAccess On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500055\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500056\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"phase:2,deny,id:500057\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (final CRLF)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "276",
        "Content-Type": "multipart/form-data; boundary=---------------------------69343412719991675451336310646",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"a\"\r\n",
        "\r\n",
        "1\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"b\"\r\n",
        "\r\n",
        "2\r\n",
        "-----------------------------69343412719991675451336310646--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Adding request argument \\(BODY\\): name \"a\", value \"1\"",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRequestBodyAccess On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500055\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500056\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"phase:2,deny,id:500057\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (no final CRLF)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "274",
        "Content-Type": "multipart/form-data; boundary=---------------------------69343412719991675451336310646",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"a\"\r\n",
        "\r\n",
        "1\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"b\"\r\n",
        "\r\n",
        "2\r\n",
        "-----------------------------69343412719991675451336310646--"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Adding request argument \\(BODY\\): name \"a\", value \"1\"",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRequestBodyAccess On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500055\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500056\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"phase:2,deny,id:500057\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (boundary contains \"boundary\")",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "276",
        "Content-Type": "multipart/form-data; boundary=------------------------------------------------boundary",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--------------------------------------------------boundary\r\n",
        "Content-Disposition: form-data; name=\"a\"\r\n",
        "\r\n",
        "1\r\n",
        "--------------------------------------------------boundary\r\n",
        "Content-Disposition: form-data; name=\"b\"\r\n",
        "\r\n",
        "2\r\n",
        "--------------------------------------------------boundary--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Adding request argument \\(BODY\\): name \"a\", value \"1\"",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRequestBodyAccess On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500055\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500056\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"phase:2,deny,id:500057\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (boundary contains \"bOuNdArY\")",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "177",
        "Content-Type": "multipart/form-data; boundary=--------0xKhTmLbOuNdArY",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "----------0xKhTmLbOuNdArY\r\n",
        "Content-Disposition: form-data; name=\"a\"\r\n",
        "\r\n",
        "1\r\n",
        "----------0xKhTmLbOuNdArY\r\n",
        "Content-Disposition: form-data; name=\"b\"\r\n",
        "\r\n",
        "2\r\n",
        "----------0xKhTmLbOuNdArY--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Adding request argument \\(BODY\\): name \"a\", value \"1\"",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRequestBodyAccess On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500055\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500056\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"phase:2,deny,id:500057\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (data contains \"--\")",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "282",
        "Content-Type": "multipart/form-data; boundary=---------------------------69343412719991675451336310646",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"a\"\r\n",
        "\r\n",
        "--test\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"b\"\r\n",
        "\r\n",
        "--\r\n",
        "-----------------------------69343412719991675451336310646--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Adding request argument \\(BODY\\): name \"a\", value \"--test\"",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRequestBodyAccess On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500055\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"phase:2,deny,id:500057\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser error (no final boundary)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "214",
        "Content-Type": "multipart/form-data; boundary=---------------------------69343412719991675451336310646",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"a\"\r\n",
        "\r\n",
        "1\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"b\"\r\n",
        "\r\n",
        "2\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Final boundary missing",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRequestBodyAccess On",
      "SecRule MULTIPART_NAME \"@eq 1234\" \"phase:2,deny,id:500067\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser error (no disposition)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "192",
        "Content-Type": "multipart/form-data; boundary=---------------------------69343412719991675451336310646",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------69343412719991675451336310646\r\n",
        "\r\n",
        "1\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        "\r\n",
        "2\r\n",
        "-----------------------------69343412719991675451336310646--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Part missing Content-Disposition header",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRequestBodyAccess On",
      "SecRule MULTIPART_NAME \"@eq 1234\" \"phase:2,deny,id:500067\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser error (bad disposition)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "274",
        "Content-Type": "multipart/form-data; boundary=---------------------------69343412719991675451336310646",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data name=\"a\"\r\n",
        "\r\n",
        "1\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data name=\"b\"\r\n",
        "\r\n",
        "2\r\n",
        "-----------------------------69343412719991675451336310646--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Invalid Content-Disposition header",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRequestBodyAccess On",
      "SecRule MULTIPART_NAME \"@eq 1234\" \"phase:2,deny,id:500067\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser error (no disposition name)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "258",
        "Content-Type": "multipart/form-data; boundary=---------------------------69343412719991675451336310646",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data;\r\n",
        "\r\n",
        "1\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data;\r\n",
        "\r\n",
        "2\r\n",
        "-----------------------------69343412719991675451336310646--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Content-Disposition header missing name field",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRequestBodyAccess On",
      "SecRule MULTIPART_NAME \"@eq 1234\" \"phase:2,deny,id:500067\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser error (no disposition name)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "339",
        "Content-Type": "multipart/form-data; boundary=---------------------------69343412719991675451336310646",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"a\"\r\n",
        "\r\n",
        "1\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        ":\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"b\"\r\n",
        "\r\n",
        "2\r\n",
        "-----------------------------69343412719991675451336310646--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "nvalid part header \\(header name missing\\)",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRequestBodyAccess On",
      "SecRule MULTIPART_NAME \"@eq 1234\" \"phase:2,deny,id:500067\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (part header folding - space)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "283",
        "Content-Type": "multipart/form-data; boundary=---------------------------69343412719991675451336310646",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data;\r\n",
        " name=\"a\"\r\n",
        "\r\n",
        "1\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data;\r\n",
        "    name=\"b\"\r\n",
        "\r\n",
        "2\r\n",
        "-----------------------------69343412719991675451336310646--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "name: a.*variable: 1.*",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"!@eq 1\" \"phase:2,deny,status:403,id:500074\"",
      "SecRule MULTIPART_HEADER_FOLDING \"!@eq 1\" \"phase:2,deny,status:403,id:500075\"",
      "SecRule MULTIPART_INVALID_HEADER_FOLDING \"!@eq 0\" \"phase:2,deny,status:403,id:500076\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"phase:2,deny,status:403,id:500077\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (part header folding - tab)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "300",
        "Content-Type": "multipart/form-data; boundary=---------------------------69343412719991675451336310646",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data;\r\n",
        "       name=\"a\"\r\n",
        "\r\n",
        "1\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data;\r\n",
        "               name=\"b\"\r\n",
        "\r\n",
        "2\r\n",
        "-----------------------------69343412719991675451336310646--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "name: a.*variable: 1.*",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"!@eq 1\" \"phase:2,deny,status:403,id:500074\"",
      "SecRule MULTIPART_HEADER_FOLDING \"!@eq 1\" \"phase:2,deny,status:403,id:500075\"",
      "SecRule MULTIPART_INVALID_HEADER_FOLDING \"!@eq 0\" \"phase:2,deny,status:403,id:500076\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"phase:2,deny,status:403,id:500077\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (part header folding - mixed)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "292",
        "Content-Type": "multipart/form-data; boundary=---------------------------69343412719991675451336310646",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"a\"\r\n",
        "\r\n",
        "1\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data;\r\n",
        "               name=\"b\"\r\n",
        "\r\n",
        "2\r\n",
        "-----------------------------69343412719991675451336310646--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "name: a.*variable: 1.*",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"!@eq 1\" \"phase:2,deny,status:403,id:500074\"",
      "SecRule MULTIPART_HEADER_FOLDING \"!@eq 1\" \"phase:2,deny,status:403,id:500075\"",
      "SecRule MULTIPART_INVALID_HEADER_FOLDING \"!@eq 0\" \"phase:2,deny,status:403,id:500076\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"phase:2,deny,status:403,id:500077\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (part header folding - invalid)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "278",
        "Content-Type": "multipart/form-data; boundary=---------------------------69343412719991675451336310646",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"a\"\r\n",
        "\r\n",
        "1\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data;\r\n",
        "\fname=\"b\"\r\n",
        "\r\n",
        "2\r\n",
        "-----------------------------69343412719991675451336310646--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "name: a.*variable: 1.*",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"!@eq 1\" \"phase:2,deny,status:403,id:500074\"",
      "SecRule MULTIPART_HEADER_FOLDING \"!@eq 1\" \"phase:2,deny,status:403,id:500075\"",
      "SecRule MULTIPART_INVALID_HEADER_FOLDING \"!@eq 1\" \"phase:2,deny,status:403,id:500076\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"phase:2,deny,status:403,id:500077\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (part header folding - mixed invalid)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "279",
        "Content-Type": "multipart/form-data; boundary=---------------------------69343412719991675451336310646",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"a\"\r\n",
        "\r\n",
        "1\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data;\r\n",
        "\f\tname=\"b\"\r\n",
        "\r\n",
        "2\r\n",
        "-----------------------------69343412719991675451336310646--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "name: a.*variable: 1.*",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"!@eq 1\" \"phase:2,deny,status:403,id:500074\"",
      "SecRule MULTIPART_HEADER_FOLDING \"!@eq 1\" \"phase:2,deny,status:403,id:500075\"",
      "SecRule MULTIPART_INVALID_HEADER_FOLDING \"!@eq 1\" \"phase:2,deny,status:403,id:500076\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"phase:2,deny,status:403,id:500077\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (data after final boundary)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "338",
        "Content-Type": "multipart/form-data; boundary=---------------------------69343412719991675451336310646",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"a\"\r\n",
        "\r\n",
        "1\r\n",
        "-----------------------------69343412719991675451336310646--\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"b\"\r\n",
        "\r\n",
        "2\r\n",
        "-----------------------------69343412719991675451336310646--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "name: a.*variable: 1.*",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_DATA_AFTER \"@eq 1\" \"phase:2,deny,status:403,id:500074\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (C-D uses single quotes)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "300",
        "Content-Type": "multipart/form-data; boundary=---------------------------69343412719991675451336310646",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=\"a\"\r\n",
        "\r\n",
        "1\r\n",
        "-----------------------------69343412719991675451336310646\r\n",
        "Content-Disposition: form-data; name=';filename=\"dummy';name=b;\"\r\n",
        "\r\n",
        "2\r\n",
        "-----------------------------69343412719991675451336310646--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Duplicate Content-Disposition name",
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"!@eq 1\" \"phase:2,deny,id:500095\"",
      "SecRule MULTIPART_INVALID_QUOTING \"!@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (invalid C-T boundary separator - comma)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data, boundary=0000",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Invalid boundary in C-T \\(malformed\\)",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"!@eq 1\" \"phase:2,deny,id:500095\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"!@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (invalid C-T boundary separator - space)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data boundary=0000",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"!@eq 1\" \"phase:2,deny,id:500095\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"!@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (invalid C-T boundary parameter name - case)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data; bOundAry=0000",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Invalid boundary in C-T \\(case sensitivity\\)",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"!@eq 1\" \"phase:2,deny,id:500095\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"!@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (invalid C-T boundary parameter name - trailing chars)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data; boundary123=0000",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Invalid boundary in C-T \\(parameter name\\)",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"!@eq 1\" \"phase:2,deny,id:500095\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"!@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (multiple C-T boundaries - first quoted)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data; boundary=\"0000\"; boundary=1111",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Multiple boundary parameters in C-T",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"!@eq 1\" \"phase:2,deny,id:500095\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"!@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (multiple C-T boundaries - comma separated)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data; boundary=0000, boundary=1111",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Multiple boundary parameters in C-T",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"!@eq 1\" \"phase:2,deny,id:500095\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"!@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (boundary whitespace in C-T - after name)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data; boundary =0000",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"!@eq 1\" \"phase:2,deny,id:500095\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"!@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (boundary whitespace in C-T - before value)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data; boundary= 0000",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "boundary whitespace in C-T header",
      "error_log": "msg \"Multipart request body failed strict validation:PE 1,BQ 0,BW 1,DB 0,DA 0,HF 0,LF 0,SM 0,IQ 0,IP 0,IH 0,FL \"",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500095,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}'\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (boundary whitespace in C-T - after value) - apache removes the whitespace, not the case for us... TODO",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data; boundary=0000 ",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "error_log": "msg \"Multipart request body failed strict validation:PE 1,BQ 0,BW 0,DB 0,DA 0,HF 0,LF 0,SM 0,IQ 0,IP 0,IH 0,FL \"",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500095,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}'\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (boundary special char - trailing whitespace+token)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "280",
        "Content-Type": "multipart/form-data;boundary=0000 1111",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"name\"\r\n",
        "\r\n",
        "Brian Rectanus\r\n",
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"email\"\r\n",
        "\r\n",
        "brian.rectanus@breach.com\r\n",
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r\n",
        "Content-Type: image/jpeg\r\n",
        "\r\n",
        "BINARYDATA\r\n",
        "--0000--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "No boundaries found in payload",
      "error_log": "msg \"Multipart request body failed strict validation:PE 1,BQ 0,BW 0,DB 1,DA 0,HF 0,LF 0,SM 0,IQ 0,IP 0,IH 0,FL \"",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500095,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}'\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (boundary special char - trailing exclamation+token)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data;boundary=0000!1111",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Invalid boundary in C-T \\(characters\\)",
      "error_log": "msg \"Multipart request body failed strict validation:PE 1,BQ 0,BW 0,DB 0,DA 0,HF 0,LF 0,SM 0,IQ 0,IP 0,IH 0,FL \"",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500095,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}'\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (quoted boundary - normal)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data;boundary=\"0000\"",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "boundary was quoted",
      "error_log": "msg \"Multipart request body failed strict validation:PE 1,BQ 1,BW 0,DB 0,DA 0,HF 0,LF 0,SM 0,IQ 0,IP 0,IH 0,FL \"",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500095,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}'\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (quoted boundary value - whitespace before)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data;boundary=\" 0000\"",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "boundary was quoted.*No boundaries found in payload",
      "error_log": "msg \"Multipart request body failed strict validation:PE 1,BQ 1,BW 0,DB 0,DA 0,HF 0,LF 0,SM 0,IQ 0,IP 0,IH 0,FL \"",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500095,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}'\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (quoted boundary value - whitespace after)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data;boundary=\"0000 \"",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Invalid boundary in C-T \\(characters\\).*boundary was quoted.",
      "error_log": "msg \"Multipart request body failed strict validation:PE 1,BQ 1,BW 0,DB 0,DA 0,HF 0,LF 0,SM 0,IQ 0,IP 0,IH 0,FL \"",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500095,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}'\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (quoted boundary value - whitespace after)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data;boundary=\"0000 \"",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Invalid boundary in C-T \\(characters\\).*boundary was quoted.",
      "error_log": "msg \"Multipart request body failed strict validation:PE 1,BQ 1,BW 0,DB 0,DA 0,HF 0,LF 0,SM 0,IQ 0,IP 0,IH 0,FL \"",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500095,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}'\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (quoted boundary value - whitespace between)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data;boundary=\"0000 1111\"",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "boundary was quoted",
      "error_log": "msg \"Multipart request body failed strict validation:PE 1,BQ 1,BW 0,DB 0,DA 0,HF 0,LF 0,SM 0,IQ 0,IP 0,IH 0,FL \"",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500095,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}'\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (quoted boundary value - contained quote)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "270",
        "Content-Type": "multipart/form-data;boundary=\"00\"00\"",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--00\"00\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--00\"00\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--00\"00\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--00\"00--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Invalid boundary in C-T \\(characters\\)",
      "error_log": "msg \"Multipart request body failed strict validation:PE 1,BQ 1,BW 0,DB 0,DA 0,HF 0,LF 0,SM 0,IQ 0,IP 0,IH 0,FL \"",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500095,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}'\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (quoted boundary value - two quoted values)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "270",
        "Content-Type": "multipart/form-data;boundary=\"00\"\"00\"",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--00\"00\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--00\"00\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--00\"00\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--00\"00--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Invalid boundary in C-T \\(characters\\)",
      "error_log": "msg \"Multipart request body failed strict validation:PE 1,BQ 1,BW 0,DB 0,DA 0,HF 0,LF 0,SM 0,IQ 0,IP 0,IH 0,FL \"",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500095,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}'\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (partial quoted boundary value - only start quote)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data;boundary=\"0000",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Invalid boundary in C-T \\(quote\\)",
      "error_log": "msg \"Multipart request body failed strict validation:PE 1,BQ 0,BW 0,DB 0,DA 0,HF 0,LF 0,SM 0,IQ 0,IP 0,IH 0,FL \"",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500095,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}'\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (partial quoted boundary value - only end quote)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "266",
        "Content-Type": "multipart/form-data;boundary=0000\"",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r",
        "Content-Disposition: form-data; name=\"name\"\r",
        "\r",
        "Brian Rectanus\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"email\"\r",
        "\r",
        "brian.rectanus@breach.com\r",
        "--0000\r",
        "Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r",
        "Content-Type: image/jpeg\r",
        "\r",
        "BINARYDATA\r",
        "--0000--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Invalid boundary in C-T \\(quote\\)",
      "error_log": "msg \"Multipart request body failed strict validation:PE 1,BQ 0,BW 0,DB 0,DA 0,HF 0,LF 0,SM 0,IQ 0,IP 0,IH 0,FL \"",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500095,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}'\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (multipart mixed - normal)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "523",
        "Content-Type": "multipart/form-data; boundary=0000",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"name\"\r\n",
        "\r\n",
        "Brian Rectanus\r\n",
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"email\"\r\n",
        "\r\n",
        "brian.rectanus@breach.com\r\n",
        "--0000\r\n",
        "Content-Disposition: attachment\r\n",
        "Content-Type: multipart/mixed; boundary=BbC04y\r\n",
        "\r\n",
        "--BbC04y\r\n",
        "Content-Disposition: file; filename=\"file1.txt\"\r\n",
        "Content-Type: text/plain\r\n",
        "\r\n",
        "... contents of file1.txt ...\r\n",
        "--BbC04y\r\n",
        "Content-Disposition: file; filename=\"file2.gif\r\n",
        "Content-Type: image/jpeg\r\n",
        "Content-Transfer-Encoding: binary\r\n",
        "\r\n",
        "...contents of file2.gif...\r\n",
        "--0000--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Invalid Content-Disposition header",
      "error_log": "msg \"Multipart request body failed strict validation:PE 1,BQ 0,BW 0,DB 0,DA 0,HF 0,LF 0,SM 0,IQ 0,IP 1,IH 0,FL \"",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500095,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}'\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (multipart mixed - missing disposition)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "490",
        "Content-Type": "multipart/form-data; boundary=0000",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"name\"\r\n",
        "\r\n",
        "Brian Rectanus\r\n",
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"email\"\r\n",
        "\r\n",
        "brian.rectanus@breach.com\r\n",
        "--0000\r\n",
        "Content-Type: multipart/mixed; boundary=BbC04y\r\n",
        "\r\n",
        "--BbC04y\r\n",
        "Content-Disposition: file; filename=\"file1.txt\"\r\n",
        "Content-Type: text/plain\r\n",
        "\r\n",
        "... contents of file1.txt ...\r\n",
        "--BbC04y\r\n",
        "Content-Disposition: file; filename=\"file2.gif\r\n",
        "Content-Type: image/jpeg\r\n",
        "Content-Transfer-Encoding: binary\r\n",
        "\r\n",
        "...contents of file2.gif...\r\n",
        "--0000--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Part missing Content-Disposition header",
      "error_log": "msg \"Multipart request body failed strict validation:PE 1,BQ 0,BW 0,DB 0,DA 0,HF 0,LF 0,SM 0,IQ 0,IP 1,IH 0,FL \"",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_STRICT_ERROR \"@eq 1\" \"phase:2,deny,id:500095,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}'\"",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500096\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"chain,phase:2,deny,id:500097\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (normal)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "596",
        "Content-Type": "multipart/form-data; boundary=0000",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"name\"\r\n",
        "\r\n",
        "Brian Rectanus\r\n",
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"email\"\r\n",
        "\r\n",
        "brian.rectanus@breach.com\r\n",
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"image1\"; filename=\"image1.jpg\"\r\n",
        "Content-Type: image/jpeg\r\n",
        "\r\n",
        "BINARYDATA1\r\n",
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"image2\"; filename=\"image2.jpg\"\r\n",
        "Content-Type: image/jpeg\r\n",
        "\r\n",
        "BINARYDATA2\r\n",
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"image3\"; filename=\"image3.jpg\"\r\n",
        "Content-Type: image/jpeg\r\n",
        "\r\n",
        "BINARYDATA3\r\n",
        "--0000\r\n",
        "Content-Disposition: form-data; name=\"test\"\r\n",
        "\r\n",
        "This is test data.\r\n",
        "--0000--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Upload file limit exceeded",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecUploadKeepFiles On",
      "SecUploadDir /tmp",
      "SecUploadFileLimit 2",
      "SecRule MULTIPART_STRICT_ERROR \"!@eq 1\" \"phase:2,deny,id:500161\"",
      "SecRule MULTIPART_FILE_LIMIT_EXCEEDED \"!@eq 1\" \"phase:2,deny,id:500162\"",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"phase:2,deny,id:500163\"",
      "SecRule &FILES \"!@eq 3\" \"phase:2,deny,id:500164\"",
      "SecRule &FILES_NAMES \"!@eq 3\" \"phase:2,deny,id:500165\"",
      "SecRule &FILES_SIZES \"!@eq 3\" \"phase:2,deny,id:500166\"",
      "SecRule FILES_SIZES:/^image/ \"@eq 0\" \"phase:2,deny,id:500167\"",
      "SecRule &FILES_TMPNAMES \"!@eq 2\" \"phase:2,deny,id:500168\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (contains foreign bound., no UNMATCH rule)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "549",
        "Content-Type": "multipart/form-data; boundary=-----------------------------8842564605616207552020332273",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-------------------------------8842564605616207552020332273\r",
        "Content-Disposition: form-data; name=\"_token\"\r",
        "\r",
        "9e433de44c9e9b4ce19603269aa34edb\r",
        "-------------------------------8842564605616207552020332273\r",
        "Content-Disposition: form-data; name=\"_attachments[]\"; filename=\"msg.txt\"\r",
        "Content-Type: text/plain\r",
        "\r",
        "----ea520cef1a2937d8e928e357992c8fdd\r",
        "Content-Transfer-Encoding: 7bit\r",
        "Content-Type: text/plain; charset=US-ASCII;\r",
        " format=flowed\r",
        "\r",
        "Test message, the txt file had been attached.\r",
        "\r",
        "--\r",
        "Ervin\r",
        "\r",
        "\r",
        "-------------------------------8842564605616207552020332273--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On"
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (contains foreign bound., strict mode)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "569",
        "Content-Type": "multipart/form-data; boundary=-----------------------------8842564605616207552020332273",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-------------------------------8842564605616207552020332273\r\n",
        "Content-Disposition: form-data; name=\"_token\"\r\n",
        "\r\n",
        "9e433de44c9e9b4ce19603269aa34edb\r\n",
        "-------------------------------8842564605616207552020332273\r\n",
        "Content-Disposition: form-data; name=\"_attachments[]\"; filename=\"msg.txt\"\r\n",
        "Content-Type: text/plain\r\n",
        "\r\n",
        "----ea520cef1a2937d8e928e357992c8fdd\r\n",
        "Content-Transfer-Encoding: 7bit\r\n",
        "Content-Type: text/plain; charset=US-ASCII;\r\n",
        " format=flowed\r\n",
        "\r\n",
        "Test message, the txt file had been attached.\r\n",
        "\r\n",
        "--\r\n",
        "Ervin\r\n",
        "\r\n",
        "\r\n",
        "-------------------------------8842564605616207552020332273--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"!@eq 0\" \"phase:2,deny,id:500095\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (ctest-cases/regression/request-body-parser-multipart.jsonontains foreign bound., wrong lead bound., strict mode)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "569",
        "Content-Type": "multipart/form-data; boundary=-----------------------------8842564605616207552020332273",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-------------------------------8842564605616207552020332274\r\n",
        "Content-Disposition: form-data; name=\"_token\"\r\n",
        "\r\n",
        "9e433de44c9e9b4ce19603269aa34edb\r\n",
        "-------------------------------8842564605616207552020332273\r\n",
        "Content-Disposition: form-data; name=\"_attachments[]\"; filename=\"msg.txt\"\r\n",
        "Content-Type: text/plain\r\n",
        "\r\n",
        "----ea520cef1a2937d8e928e357992c8fdd\r\n",
        "Content-Transfer-Encoding: 7bit\r\n",
        "Content-Type: text/plain; charset=US-ASCII;\r\n",
        " format=flowed\r\n",
        "\r\n",
        "Test message, the txt file had been attached.\r\n",
        "\r\n",
        "--\r\n",
        "Ervin\r\n",
        "\r\n",
        "\r\n",
        "-------------------------------8842564605616207552020332273--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"!@eq 0\" \"phase:2,deny,id:500095\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (contains foreign bound., wrong sep. bound., strict mode)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "569",
        "Content-Type": "multipart/form-data; boundary=-----------------------------8842564605616207552020332273",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-------------------------------8842564605616207552020332273\r\n",
        "Content-Disposition: form-data; name=\"_token\"\r\n",
        "\r\n",
        "9e433de44c9e9b4ce19603269aa34edb\r\n",
        "-------------------------------8842564605616207552020332274\r\n",
        "Content-Disposition: form-data; name=\"_attachments[]\"; filename=\"msg.txt\"\r\n",
        "Content-Type: text/plain\r\n",
        "\r\n",
        "----ea520cef1a2937d8e928e357992c8fdd\r\n",
        "Content-Transfer-Encoding: 7bit\r\n",
        "Content-Type: text/plain; charset=US-ASCII;\r\n",
        " format=flowed\r\n",
        "\r\n",
        "Test message, the txt file had been attached.\r\n",
        "\r\n",
        "--\r\n",
        "Ervin\r\n",
        "\r\n",
        "\r\n",
        "-------------------------------8842564605616207552020332273--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"!@eq 0\" \"phase:2,deny,id:500095\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (contains foreign bound., wrong final bound.)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "569",
        "Content-Type": "multipart/form-data; boundary=-----------------------------8842564605616207552020332273",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-------------------------------8842564605616207552020332273\r\n",
        "Content-Disposition: form-data; name=\"_token\"\r\n",
        "\r\n",
        "9e433de44c9e9b4ce19603269aa34edb\r\n",
        "-------------------------------8842564605616207552020332273\r\n",
        "Content-Disposition: form-data; name=\"_attachments[]\"; filename=\"msg.txt\"\r\n",
        "Content-Type: text/plain\r\n",
        "\r\n",
        "----ea520cef1a2937d8e928e357992c8fdd\r\n",
        "Content-Transfer-Encoding: 7bit\r\n",
        "Content-Type: text/plain; charset=US-ASCII;\r\n",
        " format=flowed\r\n",
        "\r\n",
        "Test message, the txt file had been attached.\r\n",
        "\r\n",
        "--\r\n",
        "Ervin\r\n",
        "\r\n",
        "\r\n",
        "-------------------------------8842564605616207552020332274--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"!@eq 0\" \"phase:2,deny,id:500095\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (contains foreign bound., one part, wrong lead)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "425",
        "Content-Type": "multipart/form-data; boundary=-----------------------------8842564605616207552020332273",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-------------------------------8842564605616207552020332274\r\n",
        "Content-Disposition: form-data; name=\"_attachments[]\"; filename=\"msg.txt\"\r\n",
        "Content-Type: text/plain\r\n",
        "\r\n",
        "----ea520cef1a2937d8e928e357992c8fdd\r\n",
        "Content-Transfer-Encoding: 7bit\r\n",
        "Content-Type: text/plain; charset=US-ASCII;\r\n",
        " format=flowed\r\n",
        "\r\n",
        "Test message, the txt file had been attached.\r\n",
        "\r\n",
        "--\r\n",
        "Ervin\r\n",
        "\r\n",
        "\r\n",
        "-------------------------------8842564605616207552020332273--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"!@eq 0\" \"phase:2,deny,id:500095\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (contains foreign bound., one part, wrong final)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "425",
        "Content-Type": "multipart/form-data; boundary=-----------------------------8842564605616207552020332273",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-------------------------------8842564605616207552020332273\r\n",
        "Content-Disposition: form-data; name=\"_attachments[]\"; filename=\"msg.txt\"\r\n",
        "Content-Type: text/plain\r\n",
        "\r\n",
        "----ea520cef1a2937d8e928e357992c8fdd\r\n",
        "Content-Transfer-Encoding: 7bit\r\n",
        "Content-Type: text/plain; charset=US-ASCII;\r\n",
        " format=flowed\r\n",
        "\r\n",
        "Test message, the txt file had been attached.\r\n",
        "\r\n",
        "--\r\n",
        "Ervin\r\n",
        "\r\n",
        "\r\n",
        "-------------------------------8842564605616207552020332274--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"!@eq 0\" \"phase:2,deny,id:500095\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (contains foreign bound., all valid, strict mode)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "777",
        "Content-Type": "multipart/form-data; boundary=---------------------------3163850615828140691827348175",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------3163850615828140691827348175\r\n",
        "Content-Disposition: form-data; name=\"_token\"\r\n",
        "\r\n",
        "3eeb646795ba8db63b05ba77df2a0b2c\r\n",
        "-----------------------------3163850615828140691827348175\r\n",
        "Content-Disposition: form-data; name=\"_attachments[]\"; filename=\"multipart_text.txt\"\r\n",
        "Content-Type: text/plain\r\n",
        "\r\n",
        "Content-Type: multipart/alternative; boundary=\"00000000000041382f056d9314e6\"\r\n",
        "\r\n",
        "--00000000000041382f056d9314e6\r\n",
        "Content-Type: text/plain; charset=\"UTF-8\"\r\n",
        "Content-Transfer-Encoding: quoted-printable\r\n",
        "\r\n",
        "Hi,\r\n",
        "\r\n",
        "...\r\n",
        "\r\n",
        "--00000000000041382f056d9314e6\r\n",
        "Content-Type: text/html; charset=\"UTF-8\"\r\n",
        "Content-Transfer-Encoding: quoted-printable\r\n",
        "\r\n",
        "<div ...>\r\n",
        "...\r\n",
        "</div>\r\n",
        "\r\n",
        "--00000000000041382f056d9314e6--\r\n",
        "\r\n",
        "\r\n",
        "-----------------------------3163850615828140691827348175--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"!@eq 0\" \"phase:2,deny,id:500095\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (contains foreign bound., permissive mode)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "549",
        "Content-Type": "multipart/form-data; boundary=-----------------------------8842564605616207552020332273",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-------------------------------8842564605616207552020332273\r",
        "Content-Disposition: form-data; name=\"_token\"\r",
        "\r",
        "9e433de44c9e9b4ce19603269aa34edb\r",
        "-------------------------------8842564605616207552020332273\r",
        "Content-Disposition: form-data; name=\"_attachments[]\"; filename=\"msg.txt\"\r",
        "Content-Type: text/plain\r",
        "\r",
        "----ea520cef1a2937d8e928e357992c8fdd\r",
        "Content-Transfer-Encoding: 7bit\r",
        "Content-Type: text/plain; charset=US-ASCII;\r",
        " format=flowed\r",
        "\r",
        "Test message, the txt file had been attached.\r",
        "\r",
        "--\r",
        "Ervin\r",
        "\r",
        "\r",
        "-------------------------------8842564605616207552020332273--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500095\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (contains foreign bound., wrong lead bound., permissive mode)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "549",
        "Content-Type": "multipart/form-data; boundary=-----------------------------8842564605616207552020332273",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-------------------------------8842564605616207552020332274\r",
        "Content-Disposition: form-data; name=\"_token\"\r",
        "\r",
        "9e433de44c9e9b4ce19603269aa34edb\r",
        "-------------------------------8842564605616207552020332273\r",
        "Content-Disposition: form-data; name=\"_attachments[]\"; filename=\"msg.txt\"\r",
        "Content-Type: text/plain\r",
        "\r",
        "----ea520cef1a2937d8e928e357992c8fdd\r",
        "Content-Transfer-Encoding: 7bit\r",
        "Content-Type: text/plain; charset=US-ASCII;\r",
        " format=flowed\r",
        "\r",
        "Test message, the txt file had been attached.\r",
        "\r",
        "--\r",
        "Ervin\r",
        "\r",
        "\r",
        "-------------------------------8842564605616207552020332273--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500095\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (contains foreign bound., wrong sep. bound., permissive mode)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "549",
        "Content-Type": "multipart/form-data; boundary=-----------------------------8842564605616207552020332273",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-------------------------------8842564605616207552020332273\r",
        "Content-Disposition: form-data; name=\"_token\"\r",
        "\r",
        "9e433de44c9e9b4ce19603269aa34edb\r",
        "-------------------------------8842564605616207552020332274\r",
        "Content-Disposition: form-data; name=\"_attachments[]\"; filename=\"msg.txt\"\r",
        "Content-Type: text/plain\r",
        "\r",
        "----ea520cef1a2937d8e928e357992c8fdd\r",
        "Content-Transfer-Encoding: 7bit\r",
        "Content-Type: text/plain; charset=US-ASCII;\r",
        " format=flowed\r",
        "\r",
        "Test message, the txt file had been attached.\r",
        "\r",
        "--\r",
        "Ervin\r",
        "\r",
        "\r",
        "-------------------------------8842564605616207552020332273--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500095\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (contains foreign bound., all valid, permissive mode)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "747",
        "Content-Type": "multipart/form-data; boundary=---------------------------3163850615828140691827348175",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "-----------------------------3163850615828140691827348175\r",
        "Content-Disposition: form-data; name=\"_token\"\r",
        "\r",
        "3eeb646795ba8db63b05ba77df2a0b2c\r",
        "-----------------------------3163850615828140691827348175\r",
        "Content-Disposition: form-data; name=\"_attachments[]\"; filename=\"multipart_text.txt\"\r",
        "Content-Type: text/plain\r",
        "\r",
        "Content-Type: multipart/alternative; boundary=\"00000000000041382f056d9314e6\"\r",
        "\r",
        "--00000000000041382f056d9314e6\r",
        "Content-Type: text/plain; charset=\"UTF-8\"\r",
        "Content-Transfer-Encoding: quoted-printable\r",
        "\r",
        "Hi,\r",
        "\r",
        "...\r",
        "\r",
        "--00000000000041382f056d9314e6\r",
        "Content-Type: text/html; charset=\"UTF-8\"\r",
        "Content-Transfer-Encoding: quoted-printable\r",
        "\r",
        "<div ...>\r",
        "...\r",
        "</div>\r",
        "\r",
        "--00000000000041382f056d9314e6--\r",
        "\r",
        "\r",
        "-----------------------------3163850615828140691827348175--\r"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "http_code": 200
    },
    "rules": [
      "SecRuleEngine On",
      "SecRule MULTIPART_UNMATCHED_BOUNDARY \"@eq 1\" \"phase:2,deny,id:500095\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (C-T parm after boundary -- invalid but tolerated)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "144",
        "Content-Type": "multipart/form-data; boundary=00000000; charset=UTF-8",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--00000000\r\n",
        "Content-Disposition: form-data; name=\"namea\"\r\n",
        "\r\n",
        "111\r\n",
        "--00000000\r\n",
        "Content-Disposition: form-data; name=\"nameb\"\r\n",
        "\r\n",
        "222\r\n",
        "--00000000--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Multipart: Invalid parameter after boundary in C-T \\(tolerated\\).*Added data",
      "http_code": 403
    },
    "rules": [
      "SecRuleEngine On",
      "SecRequestBodyAccess On",
      "SecRule ARGS:namea \"@streq 111\" \"phase:2,deny,id:500096\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (invalid part header - contains invalid character)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "145",
        "Content-Type": "multipart/form-data; boundary=a",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--a\r\n",
        "\u000EContent-Disposition\u000E: form-data; name=\"file\"; filename=\"1.jsp\"\r\n",
        "Content-Disposition: form-data; name=\"post\";\r\n",
        "\r\n",
        "<%out.print(123)%>\r\n",
        "--a--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Multipart: Invalid part header \\(contains invalid character\\)",
      "http_code": 403
    },
    "rules": [
      "SecruleEngine On",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"phase:2,deny,status:403,id:500077\""
    ]
  },
  {
    "enabled": 1,
    "version_min": 300000,
    "title": "multipart parser (invalid part header - missing trailing quote)",
    "client": {
      "ip": "200.249.12.31",
      "port": 123
    },
    "server": {
      "ip": "200.249.12.31",
      "port": 80
    },
    "request": {
      "headers": {
        "Host": "localhost",
        "User-Agent": "curl/7.38.0",
        "Accept": "*/*",
        "Content-Length": "145",
        "Content-Type": "multipart/form-data; boundary=a",
        "Expect": "100-continue"
      },
      "uri": "/",
      "method": "POST",
      "body": [
        "--a\r\n",
        "Content-Disposition: form-data; name=\"file\"; filename=\"1.jsp\r\n",
        "\r\n",
        "Some content\r\n",
        "--a--\r\n"
      ]
    },
    "response": {
      "headers": {
        "Date": "Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified": "Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type": "text/html",
        "Content-Length": "8"
      },
      "body": [
        "no need."
      ]
    },
    "expected": {
      "debug_log": "Multipart: Invalid Content-Disposition header \\(-15\\): form-data; name=\"file\"; filename=\"1.jsp",
      "http_code": 403
    },
    "rules": [
      "SecruleEngine On",
      "SecRule REQBODY_PROCESSOR_ERROR \"@eq 1\" \"phase:2,deny,status:403,id:500077\""
    ]
  }
]
