HTTP 헤더 인젝션은 공격자가 헤더에 개행문자를 삽입하여 헤더를 추가하여 공격하는 수동적 공격 방식입니다.


이 공격이 허용되는 경우 쿠키를 임의대로 생성하거나 임의로 URL를 리다이렉트 시킬 수 있습니다.


 http://example.com/?id=1001

위과 같은 코드가 있다면 아래 코드로 고쳐서 공격합니다.


 http://example.com/?id=101%0D%0A%0D%0ASet-cookie+SID=a123456789

결국 아래와 같은 결과 값을 얻게 되므로 쿠키를 만들게 됩니다.

 http://example.com/?id=101


 Set-cookie+SID=a123456789


공격자가 입력한 %0D%0A 는 \r\n 을 의미하므로 결과적으로 새로운 헤더가 만들어 지게 되는 것입니다.

다음의 방법도 주의해야할 부분입니다.


 http://example.com/?id=101%0D%0A%0D%0A<html><body><h2>Hello Habony!!</h2></body></html>

위 문자열이 HTTP 인젝션이 가능하게 되면 아래와 같은 결과가 나타나게 됩니다.

 http://example.com/?id=101


 <html>

   <body>

      <h2>Hello Habony!!</h2>

   </body>

 </html>


이 공격에 의해 유저에게 가짜 웹페이지를 표시하여 개인 정보를 입력받거나 크로스 사이트 스크립팅과 같은 공격을 받게 됩니다. 


물론 개행문자를 이용해 메일 헤더 인젝션 공격도 시도할 수 있습니다.


 http://example.com/?email=you@example.com%0D%0Ato@example.com


이렇게 입력받게 되면 공격자는 Bcc에 임의대로 수신자를 추가해 버릴 것입니다.


 <?php
 $header "you@example.com%0D%0Ato@example.com";
 mail($to$subject$content), $header);
 /*
 결과:
 you@example.com
 to@example.com
 */
 ?>


그래서 다음의 방법 등으로 문자열을 취환해서 공격을 회피해야 합니다.


 <?php
 $str "http://example.com/?id=101%0D%0A%0D%0ASet-cookie+SID=a123456789";
 
$str str_replace(array("\r""\n"), ""$str);
 
?>