2010-09-24 4 views
1

Почему/когда нужно использовать CRLF в конце заголовка в PHP? Вот один пример (это не обязательно исправим):CRLF ( r n) в функции заголовка PHP()

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"); 
+1

Это CRLF, а не CLRF. Это означает «Возврат к перевозке». – BoltClock

ответ

5

Вы никогда не должны делать вручную разрывы строк внутри из header(). Текущая реализация удаляет разрывы строк, поэтому вы в безопасности, но это может измениться в будущем (хотя нет причин, по которым это должно быть изменено).

+0

Итак, вы говорите, что я могу опустить использование CLRF в header() alltogether AND, что, используя «\ r \ n \ r \ n», он сломает мой код заголовка. Правильно? ОК. Понял. Но почему я вижу некоторые коды (я думаю, в Linux), используя «\ r \ n» в каждом утверждении заголовка? – nush

+0

Я никогда не видел такой код. Можете ли вы показать какой-то проект, который это делает? – halfdan

+2

@nush он говорит не «вы * можете * пропустить», но «вы ** никогда не должны ** использовать его». Вы видите эти коды, потому что у некоторых программистов недостаточно знаний. Такое простое объяснение. –

0

Получил мой вход в систему все смешанные, поэтому я публикую, хотя это комментарий для halfdan. Не стесняйтесь исправить это, если кто-то может.

link

Я видел, что в ссылке, и никто не упомянул о том, что вы только что сказали мне, так что я думал, что это что-то делать с Linux строки окончаний. Конечно, это был единственный раз, когда я видел «\ r \ n» в header().

+2

Ну, это сообщение просто полное дерьмо (ссылка). "header (" method: POST ");" даже не существует (некоторые другие тоже не существуют). – halfdan

+2

Стоит отметить, что код, который вы скопировали из этой ссылки, сам по себе является частью «как мне это сделать?». quesion; это был не один из ответов; это был вопрос. И ответы, которые он дал, говорят ему, что это не сработает. – Spudley

3

Если это PHP, этот код вздор.

header() функция используются для отправки ответа заголовков, в то время как некоторые из этих заголовков являются запросом из них.
Вы можете увидеть этот код, потому что тот, кто его написал, не имеет понятия.

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

0

Там был способ добавить \r\n в заголовок в PHP 4, которая была уязвимость, которая может быть использована, используя атаки инъекции CRLF см PHP HTTP Header Multiple Vulnerabilities.

Смежные вопросы