>  기사  >  백엔드 개발  >  PHP 보안 - HTTP 요청 스푸핑

PHP 보안 - HTTP 요청 스푸핑

黄舟
黄舟원래의
2017-02-22 09:19:331471검색



HTTP 요청 스푸핑

양식 스푸핑보다 더 발전되고 정교한 공격은 HTTP 요청 스푸핑입니다. 이는 공격자에게 완전한 제어와 유연성을 제공하며 사용자가 제출한 모든 데이터를 맹목적으로 신뢰할 수 없다는 것을 더욱 입증합니다.

이것이 어떻게 작동하는지 확인하려면 http://www.php.cn/에서 아래 양식을 살펴보십시오.

CODE:

 <form action="process.php"
method="POST">
  <p>Please select a color:
  <select name="color">
    <option value="red">Red</option>
    <option
value="green">Green</option>
    <option
value="blue">Blue</option>
  </select><br />
  <input type="submit" value="Select"
/></p>
  </form>


사용자가 Red를 선택하고 선택 버튼을 클릭하면 브라우저는 다음 HTTP 요청을 발행합니다.

코드:

아아앙


.

대부분의 브라우저에는 원본 URL 값이 포함되어 있으므로 스푸핑을 방지하기 위해 $_SERVER['HTTP_REFERER'] 변수를 사용하고 싶을 수도 있습니다. 물론 이것은 표준 브라우저를 사용하는 공격에 대해 사용될 수 있지만 공격자는 이 작은 성가심으로 인해 중단되지 않습니다. 공격자는 HTTP 요청의 원시 정보를 편집함으로써 HTTP 헤더 값, GET 및 POST 데이터, HTTP 요청의 모든 콘텐츠를 완전히 제어할 수 있습니다.

공격자는 원래 HTTP 요청을 어떻게 변경합니까? 과정은 매우 간단합니다. 대부분의 시스템 플랫폼에서 제공되는 Telnet 유틸리티를 통해 웹 서버의 수신 대기 포트(일반적으로 포트 80)에 연결하여 웹 서버와 직접 통신할 수 있습니다. 다음은 이 기술을 사용하여 http://www.php.cn/ 페이지를 요청하는 예입니다:

CODE:

 POST /process.php HTTP/1.1
  Host: example.org
  User-Agent: Mozilla/5.0 (X11; U; Linux i686)
  Referer: http://www.php.cn/
  Content-Type:
application/x-www-form-urlencoded
  Content-Length: 9
 
  color=red


위 예시에 표시된 요청은 HTTP/1.1 사양을 준수하는 가장 간단한 요청입니다. 호스트 정보는 외부 정보의 필수 헤더이기 때문입니다. 요청 끝을 나타내는 두 개의 연속된 줄 바꿈을 입력하면 전체 HTML 응답이 화면에 표시됩니다.

Telnet 유틸리티는 웹 서버와 직접 통신하는 유일한 방법은 아니지만 가장 편리한 방법인 경우가 많습니다. 그러나 동일한 요청을 PHP로 인코딩하면 자동화할 수 있습니다. 이전 요청은 다음 PHP 코드로 구현될 수 있습니다:

CODE:

$ telnet example.org 80
  Trying 192.0.34.166...
  Connected to example.org (192.0.34.166).
  Escape character is &#39;^]&#39;.
  GET / HTTP/1.1
  Host: example.org
 
  HTTP/1.1 200 OK
  Date: Sat, 21 May 2005 12:34:56 GMT
  Server: Apache/1.3.31 (Unix)
  Accept-Ranges: bytes
  Content-Length: 410
  Connection: close
  Content-Type: text/html
 
  <html>
  <head>
  <title>Example Web Page</title>
  </head>
  <body>
  <p>You have reached this web page by typing
&quot;example.com&quot;,
  &quot;example.net&quot;, or
&quot;example.org&quot; into your web browser.</p>
  <p>These domain names are reserved for use
in documentation and are not
  available for registration. See
  <a
href="http://www.rfc-editor.org/rfc/rfc2606.txt">RFC 2606</a>,
Section
  3.</p>
  </body>
  </html>
 
  Connection closed by foreign host.
  $


물론 위의 목적을 달성하는 방법은 여러 가지가 있지만, 중요한 점은 HTTP가 잘 알려진 표준 프로토콜이라는 것과 공격자가 경험이 거의 없다는 점입니다. 이에 대해 매우 잘 알고 있으며 일반적인 보안 취약점 공격 방법에도 익숙합니다.

스푸핑 양식에 비해 HTTP 요청을 스푸핑하는 방법은 많지 않으므로 주의해서는 안 됩니다. 내가 이러한 기술을 설명하는 이유는 공격자가 애플리케이션에 악성 정보를 입력하는 것이 얼마나 쉬운지 더 잘 보여주기 위한 것입니다. 이는 입력 필터링의 중요성과 HTTP 요청에서 제공되는 정보를 신뢰할 수 없다는 사실을 다시 한 번 강조합니다.

위는 PHP 보안-HTTP 요청 스푸핑 내용입니다. 자세한 내용은 PHP 중국어 홈페이지(www. php.cn)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.