source

안전한 $_SERVER 변수는 무엇입니까?

goodcode 2022. 9. 11. 17:12
반응형

안전한 $_SERVER 변수는 무엇입니까?

사용자가 제어할 수 있는 모든 변수. 공격자는 제어할 수도 있으므로 공격의 원인이 됩니다.이것은 "오염된" 변수라고 불리며 안전하지 않습니다.

를 사용하면 많은 변수를 제어할 수 있습니다. PHP_SELF,HTTP_USER_AGENT,HTTP_X_FORWARDED_FOR,HTTP_ACCEPT_LANGUAGE기타 대부분은 클라이언트가 송신하는HTTP 요구 헤더의 일부입니다.

안전 리스트나 오염되지 않은 리스트에 대해 아는 사람?$_SERVER변수?

'안전하다'거나 '안전하지 않다'는 것은 존재하지 않습니다.서버가 제어하는 값과 사용자가 제어하는 값만 있으며 사용자는 값의 출처와 특정 목적을 위해 값을 신뢰할 수 있는지 알아야 합니다. $_SERVER['HTTP_FOOBAR']예를 들어 데이터베이스에 저장하는 것은 완전히 안전하지만, 나는 절대 그렇게 하지 않을 것이다.eval바로 그거에요.

따라서 이러한 값을 다음 세 가지 범주로 나눕니다.

서버 제어

이러한 변수는 서버 환경에 따라 설정되며 서버 구성에 전적으로 의존합니다.

  • 'GATEWAY_INTERFACE'
  • 'SERVER_ADDR'
  • 'SERVER_SOFTWARE'
  • 'DOCUMENT_ROOT'
  • 'SERVER_ADMIN'
  • 'SERVER_SIGNATURE'

부분적으로 서버 제어

이러한 변수는 클라이언트가 송신한 특정 요구에 따라 다르지만 웹 서버에 의해 무효값이 모두 거부되어 스크립트의 부팅이 시작되지 않도록 해야 하기 때문에 유효한 값은 한정되어 있습니다.따라서 신뢰할 수 있는 것으로 간주할 수 있습니다.

  • 'HTTPS'
  • 'REQUEST_TIME'
  • 'REMOTE_ADDR'*
  • 'REMOTE_HOST'*
  • 'REMOTE_PORT'*
  • 'SERVER_PROTOCOL'
  • 'HTTP_HOST'
  • 'SERVER_NAME'
  • 'SCRIPT_FILENAME'
  • 'SERVER_PORT'
  • 'SCRIPT_NAME'

* 그REMOTE_값은 TCP/IP 핸드쉐이크에 의해 확인되는 클라이언트의 유효한 주소임을 보증합니다.이것은, 응답을 송신하는 주소입니다. REMOTE_HOST는 역 DNS 룩업에 의존하기 때문에 서버에 대한 DNS 공격에 의해 스푸핑될 수 있습니다(이 경우 더 큰 문제가 발생합니다).이 값은 프록시일 수 있습니다.이것은 TCP/IP 프로토콜의 단순한 실체이며 사용자가 할 수 있는 것은 아무것도 없습니다.

§ 웹 서버가 다음과 같은 요구에 응답하는 경우HOST이 또한 안전하지 않은 것으로 간주해야 합니다.$_SERVER["HTTP_HOST"]안전성을 참조해 주세요.
http://shiflett.org/blog/2006/mar/server-name-versus-http-host 도 참조해 주세요.

§ https://bugs.php.net/bug.php?id=64457, http://httpd.apache.org/docs/current/mod/core.html#usecanonicalphysicalport, 참조

완전히 임의의 사용자 제어 값

이러한 값은 전혀 체크되지 않으며 서버 구성에 의존하지 않습니다.클라이언트에 의해 송신되는 임의의 정보입니다.

  • 'argv','argc' 웹 (CLI 호출에 대한 우려는 없습니다.
  • 'REQUEST_METHOD'§
  • 'QUERY_STRING'
  • 'HTTP_ACCEPT'
  • 'HTTP_ACCEPT_CHARSET'
  • 'HTTP_ACCEPT_ENCODING'
  • 'HTTP_ACCEPT_LANGUAGE'
  • 'HTTP_CONNECTION'
  • 'HTTP_REFERER'
  • 'HTTP_USER_AGENT'
  • 'AUTH_TYPE'
  • 'PHP_AUTH_DIGEST'
  • 'PHP_AUTH_USER'
  • 'PHP_AUTH_PW'
  • 'PATH_INFO'
  • 'ORIG_PATH_INFO'
  • 'REQUEST_URI'된 데이터를 할 수 )(「오염된 데이터를 포함할 수 있습니다.
  • 'PHP_SELF'된 데이터를 할 수 )(「오염된 데이터를 포함할 수 있습니다.
  • 'PATH_TRANSLATED'
  • 'HTTP_'

§ 웹 서버가 특정 요청 방식만 허용하는 한 신뢰할 수 있는 것으로 간주될 수 있습니다.

§ 인증이 웹 서버에 의해 완전히 처리되는 경우 신뢰성이 높다고 간주될 수 있습니다.

'''$_SERVER에는 몇 가지 환경변수도 포함되어 있습니다.이것들이 「안전」한지 아닌지는, 정의 방법(및 장소)에 따라서 다릅니다.완전한 서버 제어에서 완전한 사용자 제어까지 다양합니다.

PHP の 음음음 。$_SERVER「」로 하는 변수HTTP_는 사용자의 영향을 받을 수 있습니다.를 들어 변수 " " " 입니다.$_SERVER['HTTP_REINERS'] 헤더를 될 수 .REINERSHTTP를 사용합니다.

언급URL : https://stackoverflow.com/questions/6474783/which-server-variables-are-safe

반응형