| 'use strict'; |
| |
| const common = require('../common'); |
| const http = require('http'); |
| const net = require('net'); |
| const assert = require('assert'); |
| |
| // Verify that invalid chunk extensions cannot be used to perform HTTP request |
| // smuggling attacks. |
| |
| const server = http.createServer(common.mustCall((request, response) => { |
| assert.notStrictEqual(request.url, '/admin'); |
| response.end('hello world'); |
| }), 1); |
| |
| server.listen(0, common.mustCall(start)); |
| |
| function start() { |
| const sock = net.connect(server.address().port); |
| |
| sock.write('' + |
| 'GET / HTTP/1.1\r\n' + |
| 'Host: localhost:8080\r\n' + |
| 'Transfer-Encoding: chunked\r\n' + |
| '\r\n' + |
| '2;\n' + |
| 'xx\r\n' + |
| '4c\r\n' + |
| '0\r\n' + |
| '\r\n' + |
| 'GET /admin HTTP/1.1\r\n' + |
| 'Host: localhost:8080\r\n' + |
| 'Transfer-Encoding: chunked\r\n' + |
| '\r\n' + |
| '0\r\n' + |
| '\r\n' |
| ); |
| |
| sock.resume(); |
| sock.on('end', common.mustCall(function() { |
| server.close(); |
| })); |
| } |