안전한 $_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']
헤더를 될 수 .REINERS
HTTP를 사용합니다.
언급URL : https://stackoverflow.com/questions/6474783/which-server-variables-are-safe
'source' 카테고리의 다른 글
Larabel 5 PDOException에서 드라이버를 찾을 수 없음 (0) | 2022.09.11 |
---|---|
PHP와 함께 JSON POST 수신 (0) | 2022.09.11 |
단일 그림에서 여러 그림에 대해 서로 다른 색상의 선을 얻는 방법 (0) | 2022.09.11 |
regex 일치 배열을 만듭니다. (0) | 2022.09.11 |
형식 매개 변수의 개체를 인스턴스화하는 중 (0) | 2022.09.08 |