I'll make it "won't fix".

--
Yasuo Ohgaki

Melvyn Sopacua wrote:
> On Sun, 8 Sep 2002, Yasuo Ohgaki wrote:
> 
> YO>>> Date: Sun, 08 Sep 2002 11:01:44 +0900
> YO>>> From: Yasuo Ohgaki <[EMAIL PROTECTED]>
> YO>>> To: [EMAIL PROTECTED]
> YO>>> Subject: [PHP-DEV] Re: #19286 [NEW]: header() Control Char Injection
> YO>>> 
> YO>>> Yasuo Ohgaki wrote:
> YO>>> > This obvious security risk is mentioned in bugtraq today.
> 
> Since when is PHP responsible for unvalidated user input? I think the
> documentation already states:
> " Variables provided to the script via any user input mechanism, and which
> therefore cannot be trusted. "
> 
> The superglobals are exactly for this reason - that the user knows, this
> input should be validated.
> 
> YO>>> > 
> YO>>> > IMHO, this is users' fault. They must check values before
> YO>>> > using it. In this specfic case, user should use simple regex
> YO>>> > before feeding str to header().
> YO>>> > 
> YO>>> > Any opinion to meke this to "won't fix"?
> YO>>> 
> YO>>> One thing we could do is force header parameter a single line.
> YO>>> Any idea it may broke applications?
> 
> header("Content-Type: text/plain;\n\tfilename=\"filename.txt\"");
> 
> RFC 2616:
> HTTP/1.1 header field values can be folded onto multiple lines if the
>    continuation line begins with a space or horizontal tab. All linear
>    white space, including folding, has the same semantics as SP. A
>    recipient MAY replace any linear white space with a single SP before
>    interpreting the field value or forwarding the message downstream.
> 
> LWS            = [CRLF] 1*( SP | HT )
> 
> So, the error in this case, would be that \r\n\r\n is accepted as a
> valid header, but since the line isn't continued with a space or tab,
> the header is not valid.
> 
> Isn't that the webserver's or even the client's responsibility to
> accept that header? I.e.: Does it redirect? And if not - it's end of
> content and this writes a body.
> 
> It's the same user-responsibility as hosting a forum:
> the forum-software is responsible for proper HTML escaping, not the
> language it's written in.
> 
> YO>>> 
> YO>>> --
> YO>>> Yasuo Ohgaki
> YO>>> 
> YO>>> > 
> YO>>> > -- 
> YO>>> > Yasuo Ohgaki
> YO>>> > 
> YO>>> > [EMAIL PROTECTED] wrote:
> YO>>> > 
> YO>>> >> From:             [EMAIL PROTECTED]
> YO>>> >> Operating system: Win32
> YO>>> >> PHP version:      4.2.3
> YO>>> >> PHP Bug Type:     Output Control
> YO>>> >> Bug description:  header() Control Char Injection
> YO>>> >>
> YO>>> >> I made a quite primitive use of the header() function in a redirect
> YO>>> >> script:
> YO>>> >>
> YO>>> >> <?php
> YO>>> >> if (isset($_GET["url"])) {
> YO>>> >> header("Location: " . $_GET["url"]);
> YO>>> >> }
> YO>>> >> ?>
> YO>>> >>
> YO>>> >> But, no imagine for a second:
> YO>>> >>
> YO>>> >> 
>url=http%3A%2F%2Fwww.yahoo.com%2F%0D%0A%0D%0A%3Cscript%3Ealert%28document.cookie%29%3B%3C%2FSCRIPT%3E%0D%0A%0D%0A
> 
> YO>>> >>
> YO>>> >>
> YO>>> >> Which causes:
> YO>>> >>
> YO>>> >> Location: http://www.yahoo.com/
> YO>>> >>
> YO>>> >> <script>alert(document.cookie)</script>
> YO>>> >>
> YO>>> >> Another interesting thing about this is that it (possibly) allows
> YO>>> >> bypassing output buffering(?).
> YO>>> >>
> YO>>> >> If nothing else, this is a documentation problem, as the header() docs 
> YO>>> >> say
> YO>>> >> that it will modify a single header, but it also allows body content 
> YO>>> >> to be
> YO>>> >> manipulated.
> YO>>> > 
> YO>>> > 
> YO>>> 
> YO>>> 
> YO>>> 
> 



-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to