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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP的header()函数中的CRLF( r n)相关的知识,希望对你有一定的参考价值。

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

header("method: POST
");
header('Host: '.get_option('transact_url')."
");
header('Content-type: application/x-www-form-urlencoded');
header('Content-length: '.strlen($transaction)."
");
header($transaction."

");
header("Connection: close

");
header("Location: ".$key_client_url."
");
答案

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

另一答案

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

header()函数用于发送答案标题,而其中一些标题是请求标题。 你可以看到这段代码,因为编写它的人没有任何线索。

另一答案

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

link

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

另一答案

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

另一答案

有一种方法可以将 添加到php 4中的标题,这是可以被利用的漏洞,使用CRLF注入攻击查看PHP HTTP Header Multiple Vulnerabilities

以上是关于PHP的header()函数中的CRLF( r n)的主要内容,如果未能解决你的问题,请参考以下文章

CRLF注入漏洞

PHP 邮件格式问题 - 为啥 CRLF 标题行结尾会破坏 Outlook 中的 HTML 电子邮件?

是否可以在 HTTP 标头字段中包含多个 CRLF?

tr -d 或 sed -e 's/\r//g' 无法从 MINGW32 中的文件中删除 CRLF

从 php 中的文本输入中获取 CRLF

CRLF注入原理