There are several HTTP status codes related to content-length:
- 411 Length Required: Server requires Content-Length header but it's missing
if (!$request->hasHeader('Content-Length')) { return response()->json(['error' => 'Content-Length header required'], 411); }
- 413 Request Entity Too Large: Body exceeds server's size limit
$maxSize = 5 * 1024 * 1024; // 5MB if ($request->header('Content-Length') > $maxSize) { return response()->json(['error' => 'Payload too large'], 413); }
- 400 Bad Request: Content-Length doesn't match actual body size
$actualSize = strlen($request->getContent()); $declaredSize = $request->header('Content-Length'); if ($actualSize != $declaredSize) { return response()->json(['error' => 'Content-Length mismatch'], 400); }
CVE-2019-11043 - PHP-FPM Buffer Overflow
CVE-2018-7583 vulnerability
// Simplified PHP internal C code void parse_multipart_data(request_t *request) { // Step 1: Allocate based on Content-Length header size_t declared_size = get_header_value("Content-Length"); // 100 char *buffer = malloc(declared_size); // 100 bytes allocated // Step 2: Read actual data until boundary size_t bytes_read = 0; while (!found_boundary()) { // This reads MORE than Content-Length declared! bytes_read += read(input, buffer + bytes_read, CHUNK_SIZE); // If bytes_read > 100, we overflow the buffer! } }
Memory Layout: [Buffer: 100 bytes][Other Data][Return Address] What happens: 1. Buffer allocated: [100 empty bytes] 2. Reads 500 bytes: [100 bytes][400 OVERFLOW→][Corrupted][Corrupted] ↑ Overwrites other memory!
Affected Versions:
- PHP 7.0.x before 7.0.28
- PHP 7.1.x before 7.1.15
- PHP 7.2.x before 7.2.3
Fixed in:
- PHP 7.0.28
- PHP 7.1.15
- PHP 7.2.3
- PHP 7.3.0 and later
Top comments (0)