양식 스푸핑보다 더 발전되고 정교한 공격은 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 '^]'. 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 "example.com", "example.net", or "example.org" 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)!