안전한 $_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
'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 |