BOARD

자료·레퍼런스

PHP 서버 변수 PHPSELF, SCRIPTNAME, REQUESTURI 차이점과 활용

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 12회 작성일 26-10-05 16:40

본문

PHP 서버 변수 PHPSELF, SCRIPTNAME, REQUEST_URI 차이점과 활용

그누보드 운영 및 개발 시 자주 접하는 PHP 서버 변수들의 기술적 차이를 이해하고, 상황에 맞는 올바른 변수를 선택하여 코드 안정성을 높이는 방법을 안내합니다.

PHP 서버 변수 비교: PHPSELF, SCRIPTNAME, REQUEST_URI

PHP 개발 및 그누보드 운영 시 자주 사용하는 서버 변수들은 비슷해 보이지만, 요청 상황과 서버 설정에 따라 반환하는 값이 다릅니다. 각 변수의 특징과 차이점을 이해하고 용도에 맞게 선택해야 합니다.

1. 주요 변수별 정의 및 특징

  • $_SERVER['PHP_SELF']: 현재 실행 중인 스크립트의 경로와 파일명을 반환합니다. 도메인을 제외한 경로를 포함하며, 상황에 따라 PATH_INFO 정보가 포함될 수 있습니다.
  • $_SERVER['SCRIPT_NAME']: 현재 실행 중인 스크립트의 경로와 파일명만 반환합니다. 파라미터나 추가 경로 정보를 포함하지 않아, 자기 자신을 가리키는 링크를 생성할 때 주로 사용합니다.
  • $_SERVER['REQUEST_URI']: 클라이언트가 요청한 전체 URI를 반환합니다. GET 파라미터(예: ?foo=bar)를 포함합니다.

2. 요청 시나리오별 반환값 비교

시나리오PHP_SELFSCRIPT_NAMEREQUEST_URI
http://example.com/test.php/test.php/test.php/test.php
http://example.com/test.php/foo/bar/test.php/foo/bar/test.php/test.php/foo/bar
http://example.com/test.php?foo=bar/test.php/test.php/test.php?foo=bar

3. 환경 및 설정에 따른 주의사항

  • 서버 리다이렉션: Apache의 mod_rewrite 등을 사용하여 리다이렉션이 발생할 경우, SCRIPT_NAME은 리다이렉트된 대상 파일명을 반환할 수 있습니다.
  • HTTP 에러 페이지: ErrorDocument 설정으로 404 에러 페이지를 호출할 때, SCRIPT_NAME은 에러 처리용 스크립트 경로를 반환하지만 REQUEST_URI는 원래 요청했던 경로를 유지하는 등 차이가 발생합니다.
  • 보안 권장사항: 그누보드 등 PHP 코드 내에서 $_SERVER 변수를 출력하거나 사용할 때는 보안을 위해 strip_tags()나 htmlspecialchars() 함수를 사용하여 태그 제거 및 특수문자 처리를 거치는 것이 안전합니다.

PHP 서버 변수 비교: PHPSELF, SCRIPTNAME, REQUEST_URI

PHP 개발 및 그누보드 운영 시 자주 사용하는 서버 변수들은 비슷해 보이지만, 요청 상황에 따라 반환하는 값이 다릅니다. 각 변수의 특성을 이해하고 용도에 맞게 선택해야 합니다.

1. 주요 변수별 특징

  • $_SERVER['PHP_SELF']: 현재 실행 중인 스크립트의 경로와 파일명을 반환합니다. URL에 추가적인 경로 정보(PATH_INFO)가 포함되어 있다면 이 정보까지 함께 반환합니다.
  • $_SERVER['SCRIPT_NAME']: 현재 실행 중인 스크립트의 경로와 파일명만 반환합니다. 파라미터나 추가 경로 정보를 포함하지 않아 가장 안정적입니다.
  • $_SERVER['REQUEST_URI']: 클라이언트가 요청한 전체 URI를 반환하며, GET 파라미터(예: ?foo=bar)를 포함합니다.

2. 시나리오별 반환 값 비교

요청 URL이 http://example.com/test.php/foo/bar인 경우:

  • PHP_SELF: /test.php/foo/bar
  • SCRIPT_NAME: /test.php

요청 URL이 http://example.com/test.php?foo=bar인 경우:

  • SCRIPT_NAME: /test.php
  • REQUEST_URI: /test.php?foo=bar

3. 자기 자신을 가리키는 링크 생성 시 권장 사항

자기 자신을 호출하거나 폼(form)의 action 경로를 설정할 때는 $_SERVER['SCRIPT_NAME']을 사용하는 것이 가장 안전합니다. 이는 파라미터나 불필요한 경로 정보를 제외한 순수 스크립트 경로만을 반환하기 때문입니다.

4. 주의사항 및 환경별 차이

  • 서버 리다이렉션 및 에러 페이지: Apache의 mod_rewrite나 커스텀 에러 페이지(ErrorDocument) 설정 시, 변수 값이 의도와 다르게 변경될 수 있습니다. 예를 들어, IIS에서 커스텀 에러 페이지를 사용하면 SCRIPT_NAME이 에러 페이지 경로를 가리킬 수 있습니다.
  • 보안: 그누보드 등 PHP 코드에서 $_SERVER 변수를 출력하거나 사용할 때는 htmlspecialchars 등을 사용하여 XSS(교차 사이트 스크립팅) 공격을 방지하는 처리가 필요합니다.

서버 리다이렉션 및 에러 페이지 설정 시 변수 값 변화

서버 설정(Apache mod_rewrite, ErrorDocument 등)이 적용된 환경에서는 요청된 URL과 실제 실행되는 스크립트 경로가 달라질 수 있어, 서버 변수 값도 일반적인 상황과 다르게 반환됩니다.

1. Apache mod_rewrite 리다이렉션 시

서버 측 리다이렉션이 동작하면 SCRIPT_NAME은 원래 요청한 파일이 아닌, 리다이렉트된 대상 스크립트의 경로를 반환합니다.

  • 요청 URL: http://example.com/test.php
  • REQUEST_URI: /test.php (원래 요청한 경로 유지)
  • SCRIPT_NAME: /test2.php (리다이렉트된 실제 실행 스크립트 경로)

2. 커스텀 404 에러 페이지 설정 시

ErrorDocument 404 /404error.php와 같이 에러 페이지를 지정한 경우, 서버 종류에 따라 변수 값이 다음과 같이 달라집니다.

  • Apache 환경
    • REQUEST_URI: /test.php (사용자가 원래 요청했던 경로)
    • SCRIPT_NAME: /404error.php (실제로 실행된 에러 처리 스크립트 경로)
  • IIS 환경
    • SCRIPT_NAME: /404error.php
    • REQUEST_URI: /404error.php?404;http://example.com/test.php (에러 페이지 경로와 함께 원래 요청 정보가 쿼리 스트링 형태로 포함됨)

3. 운영 시 주의사항

  • 경로 의존성: 리다이렉션이나 에러 페이지 환경에서는 SCRIPT_NAME이 실제 실행 파일 경로를 가리키므로, 원래 요청한 주소를 추적해야 하는 로직에서는 REQUEST_URI를 사용해야 합니다.
  • 테스트 필수: 서버 설정(Apache, IIS 등)에 따라 변수 값이 생략되거나 다르게 제공될 수 있으므로, 특정 환경에서 코드를 배포하기 전 var_dump($_SERVER) 등을 통해 실제 반환값을 확인하는 과정이 필요합니다.

PHP 서버 변수 활용 가이드

그누보드 운영 및 개발 시, 상황에 맞는 서버 변수를 선택하여 경로 오류나 보안 문제를 예방할 수 있습니다.

내 상황우선할 판단다음 행동
자기 자신을 호출하는 링크/폼 생성경로 안정성(파라미터 제외)$_SERVER['SCRIPT_NAME'] 사용
파라미터가 포함된 전체 주소 필요전체 요청 정보 유지$_SERVER['REQUEST_URI'] 사용
리다이렉션/에러 페이지 환경서버 설정에 따른 값 변화 확인var_dump($_SERVER)로 실제 반환값 테스트
사용자 입력/서버 변수 출력XSS 보안 위협 방지htmlspecialchars()로 정제 후 출력

실전 FAQ

Q: PHP_SELF와 SCRIPT_NAME은 항상 같은 값을 반환하나요? A: 아닙니다. URL 뒤에 추가 경로 정보(PATH_INFO)가 붙는 경우 PHP_SELF는 이를 포함하지만, SCRIPT_NAME은 순수 스크립트 경로만 반환합니다. 따라서 자기 자신을 가리키는 링크를 만들 때는 경로가 변하지 않는 SCRIPT_NAME이 더 안전합니다.

Q: 서버 리다이렉션(mod_rewrite) 사용 시 변수 값이 달라지는 이유는 무엇인가요? A: 서버 설정에 의해 실제 실행되는 파일이 변경될 경우 SCRIPT_NAME은 리다이렉트된 대상 스크립트 경로를 가리키게 됩니다. 원래 사용자가 요청한 주소를 유지해야 하는 로직이라면 REQUEST_URI를 사용해야 합니다.

Q: 그누보드 코드에서 $_SERVER 변수를 사용할 때 주의할 점은 무엇인가요? A: $_SERVER 변수는 사용자의 요청 정보를 담고 있어 그대로 출력하면 XSS 공격에 취약합니다. 그누보드 소스 내에서 $_SERVER['HTTP_HOST'] 등을 출력할 때처럼 반드시 htmlspecialchars() 함수를 거쳐 특수 문자를 처리해야 합니다.

함께 보면 좋은 글

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.