Re: [PHP-DEV] Disallow newlines in CURLOPT_HTTPHEADER

[email protected] (Tim Düsterhus) Thu, 09 Jul 2026 13:10:02 +0200
Newsgroups php.internals
Message-ID <[email protected]>
Hi

On 2026-07-09 12:49, Matteo Beccati wrote:
> Il 09/07/2026 10:17, Sjoerd Langkemper ha scritto:
>> This is not supported behavior by cURL, and it is a security risk when 
>> a header value is under control of an attacker: they can inject 
>> arbitrary headers to the request.
>> 
>> I propose to not allow newlines in header values. Any thoughts on 
>> this? Should this first raise a deprecation warning before throwing a 
>> value error? I haven't added this to the deprecation RFC as I thought 
>> that is being finalized and made ready for voting soon.
> 
> "\r\n" inside headers used to be perfectly legal for multiline headers.

This is not correct. What was legal was the sequence "\r\n" followed *by 
either a space or a tab*. And it is equivalent to just a space. The 
newlines are not “visible” in the parsed value. There is literally zero 
reason to emit the obsolete line-folding syntax nowadays. As far as I 
can tell it only existed due to considerations regarding the length of a 
single line.

> It is now obsolete, but I'm not sure why we should prevent it, if curl 
> does not.

Curl specifically documents:

> The headers included in the linked list must not be CRLF-terminated, 
> since libcurl adds CRLF after each header item itself. Failure to 
> comply with this might result in strange behavior. libcurl passes on 
> the verbatim strings you give it, without any filter or other safe 
> guards. That includes white space and control characters.

Best regards
Tim Düsterhus