PHP的header()函数中的CRLF(\ r \ n)

时间:2010-09-24 10:26:39

标签: php http-headers newline

为什么/何时必须在PHP的标题末尾使用CRLF? 这是一个例子(它不一定正确):

header("method: POST\r\n");
header('Host: '.get_option('transact_url')."\r\n");
header('Content-type: application/x-www-form-urlencoded');
header('Content-length: '.strlen($transaction)."\r\n");
header($transaction."\r\n\r\n");
header("Connection: close\r\n\r\n");
header("Location: ".$key_client_url."\r\n");

5 个答案:

答案 0 :(得分:5)

你永远不应该在header()内部进行手动换行。当前的实现删除了换行符,因此您可以安全,但这可能在将来发生变化(尽管没有理由应该更改它)。

答案 1 :(得分:3)

如果是PHP,这段代码是无稽之谈。

header()函数用于发送 answer 标题,而其中一些标题是 request 标题。
你可以看到这段代码,因为编写它的人不知道。

答案 2 :(得分:0)

让我的登录全部混合,所以我发帖,虽然这是对halfdan的评论。如果有人可以,请随意纠正。

link

我在链接中看到了没有人提到你刚刚告诉我的内容,所以我认为它与Linux的行结尾有关。当然,这是我在header()中唯一一次看到“\ r \ n”。

答案 3 :(得分:0)

Halfdan是对的。 这是解释。

请求行和标题必须以CRLF结尾(即回车符后跟换行符)。空行必须只包含其他空格。

    Request       = Request-Line              ; Section 5.1
                    *(( general-header        ; Section 4.5
                     | request-header         ; Section 5.3
                     | entity-header ) CRLF)  ; Section 7.1
                    CRLF
                    [ message-body ]          ; Section 4.3

来源:w3c.org - Hypertext Transfer Protocol -- HTTP/1.1

答案 4 :(得分:0)

有一种方法可以将\r\n添加到php 4中的标头,这是可以被利用的漏洞,使用CRLF注入攻击,请参阅PHP HTTP Header Multiple Vulnerabilities