글로벌 주 길들이기 : PHP 슈퍼 글로벌을 효과적으로 사용하기위한 전략
입력을 일찍 추출하고 소독하고 기능으로 명시 적으로 전달하여 비즈니스 로직에서 슈퍼 글로벌을 직접 사용하지 마십시오. 2. 슈퍼 글로벌 액세스를 캡슐화하여 테스트 가능성 및 제어를 개선하기 위해 요청 또는 세션과 같은 래퍼 클래스를 만듭니다. 3. 애플리케이션의 진입 점에서 Filter_Input () 또는 유효성 검사 라이브러리를 사용하여 항상 입력을 소독하고 유효성을 유지하십시오. 4. 전용 클래스를 통해 세션 관리를 중앙 집중화하고 세션 _start ()을 한 번 호출하여 $ _session에 대한 의존도를 최소화합니다. 5. 재사용 가능한 라이브러리 또는 도우미에서 슈퍼 글로벌에 액세스하지 마십시오. 대신에 필요한 데이터를 컨텍스트 독립성을 유지하기위한 매개 변수로 전달합니다. 6. $ _server를 조심스럽게 처리하고 주요 존재를 확인하고 특히 CLI 또는 신뢰할 수없는 환경에서 그 가치에 대한 가정을 피하십시오. 수퍼 글로벌을 신뢰할 수없는 입력 소스로 취급하고 안전한 인터페이스 뒤에 추상화함으로써 PHP 응용 프로그램의 보안, 유지 관리 및 테스트 가능성을 향상시킵니다.
PHP SuperGlobals- $_GET
, $_POST
, $_SESSION
및 $_SERVER
와 같은 내장 변수는 편리하지만 종종 오용됩니다. 전 세계적으로 액세스 할 수 있으므로 숨겨진 종속성을 도입하고 테스트를 더 어렵게 만들고 신중하게 처리하지 않으면 보안 위험을 야기 할 수 있습니다. 그들을 길들이는 것은 그들을 완전히 피하는 것이 아니라 신중하게 사용하여 더 안전하고 예측 가능한 패턴으로 감싸는 것입니다.

PHP 슈퍼 글로벌을 응용 프로그램을 인수하지 않고 효과적으로 사용하는 방법은 다음과 같습니다.
1. 비즈니스 로직에서 슈퍼 글로벌을 직접 사용하지 마십시오
가장 큰 함정 중 하나는 함수 나 클래스 내에서 $_POST['email']
또는 $_GET['id']
참조하는 것입니다. 이는 코드를 HTTP 요청에 엄격하게 연결하므로 테스트하거나 재사용하기가 어렵습니다.

대신 입력을 일찍 추출하고 소독한 다음 명시 적으로 전달합니다.
// ❌ 나쁜 : 논리에서 직접 사용합니다 함수 saveuser () { $ email = $ _post [ '이메일']; // ... 프로세스 } // ✅ 양호 : 데이터를 주입하십시오 함수 saveuser (String $ email) { // ... 프로세스 } // 최상위 레벨 (컨트롤러 또는 경로 처리기) $ email = filter_input (input_post, 'email', filter_validate_email); if ($ email) { SaveUser ($ 이메일); }
이것은 비즈니스 논리를 깨끗하고 테스트 할 수 있도록합니다. 이제 SuperGlobals를 위조하지 않고 단위 테스트에서 saveUser('test@example.com')
에 전화 할 수 있습니다.

2. 더 나은 제어 및 테스트 가능성을 위해 슈퍼 글로벌을 래핑하십시오
슈퍼 글로벌 데이터에 액세스하기 위해 얇은 래퍼 클래스 또는 유틸리티 함수를 만듭니다. 이것은 단일 제어 지점을 제공하며 테스트 중에 쉽게 조롱 할 수 있습니다.
Get and Post의 예제 래퍼 :
클래스 요청 { 공개 함수 get (String $ key, $ default = null) : Mixed { return $ _get [$ 키] ?? $ 기본값; } public function post (String $ 키, $ default = null) : Mixed { return $ _post [$ 키] ?? $ 기본값; } 공개 함수 haspost (String $ 키) : bool { 반환 ISSET ($ _ post [$ key]); } }
이제 코드는 $_POST['email']
대신 $request->post('email')
사용합니다. 테스트 중에는 글로벌 상태에 의존하는 대신 모의 또는 테스트 더블을 전달할 수 있습니다.
3. 초기를 소독하고 검증하십시오
슈퍼 글로벌에는 원시적이고 신뢰할 수없는 입력이 포함되어 있습니다. 데이터가 안전하다고 가정하지 마십시오.
php의 filter_input()
또는 filter_var()
함수를 사용하여 유효성을 검사하고 소독합니다.
$ email = filter_input (input_post, 'email', filter_validate_email); $ age = filter_input (input_post, 'age', filter_validate_int, [ '옵션'=> [ 'min_range'=> 18, 'max_range'=> 120] ]); $ url = filter_input (input_post, 'url', filter_sanitize_url);
또는보다 복잡한 규칙을 위해서는 유효성 검사 라이브러리 (예 : expect \ validation 또는 symfony validator)를 사용하십시오. 열쇠는 코드 전체에 흩어져 있지 않은 진입 점에서 검증하는 것 입니다.
4. $ _session에 대한 의존도를 최소화합니다
$_SESSION
코드를 조용히 제어 할 수없는 다른 글로벌입니다. 직접 $_SESSION
에 쓰는 대신 :
// ❌ $ _session [ 'user_id'] = 123;
세션 로직 캡슐화 :
수업 세션 { 공개 함수 세트 (문자열 $ 키, $ 값) : void { $ _session [$ key] = $ value; } 공개 함수 get (String $ key, $ default = null) : Mixed { return $ _session [$ key] ?? $ 기본값; } public function setUser (int $ id) : void { $ this-> set ( 'user_id', $ id); } 공개 함수 getUserId () :? int { $ this-> get ( 'user_id'); } }
이제 세션 관리가 중앙 집중화되어 있고 디버그하기 쉽고 조롱 할 수 있습니다.
또한 요청이 시작될 때 항상 session_start()
한 번 호출하고 파일에 흩어지는 것을 피하십시오.
5. 라이브러리와 도우미의 슈퍼 글로벌을 피하십시오
재사용 가능한 구성 요소 (메일러, 로거 또는 유틸리티)는 $_SERVER
, $_GET
또는 $_POST
직접 액세스해서는 안됩니다. 그것은 웹 컨텍스트에 의존하게 만듭니다.
대신 필요한 데이터 (예 : 현재 URL, 사용자 에이전트)를 매개 변수로 전달합니다.
// ❌ 함수 logrequest () { error_log ($ _ server [ 'request_uri']); } // ✅ 함수 logrequest (String $ uri) { error_log ($ uri); } // 용법 logrequest ($ _ server [ 'request_uri']);
이를 통해 CLI 또는 API 컨텍스트에서 도우미가 유연하고 사용할 수 있습니다.
6. $ _server를 염두에 두십시오
$_SERVER
에는 유용한 정보가 포함되어 있습니다 ( REQUEST_METHOD
, HTTP_USER_AGENT
, REMOTE_ADDR
)은 모든 키가 존재하도록 보장되는 것은 아닙니다. 항상 확인하십시오 :
$ method = $ _server [ 'request_method'] ?? '얻다'; $ ip = $ _server [ 'remote_addr'] ?? '알려지지 않은';
그리고 기억하십시오 : $_SERVER
CLI 모드에서 스푸핑하거나 누락 될 수 있습니다. 중요 로직 (예 : 요금 제한)의 경우 신뢰할 수있는 값을 설정하기 위해 신뢰할 수있는 프록시 또는 미들웨어를 사용하는 것을 고려하십시오.
최종 생각
Superglobals는 악하지 않습니다. 문제는 부주의하게 사용될 때 발생하여 단단한 커플 링과 예측할 수없는 행동을 만듭니다.
- 입력을 일찍 추출하고 소독합니다
- 추상화에 슈퍼 글로벌을 랩핑하십시오
- 사용하기 전에 확인하십시오
- 비즈니스 논리를 글로벌 의존성을 갖추지 않도록하십시오
- 테스트 가능성 및 재사용을위한 설계
슈퍼 글로벌을 도메인 모델의 일부가 아닌 원시 입력 소스로 취급함으로써 코드를보다 유지 관리 가능하고 안전하며 테스트하기 쉽게 유지합니다.
기본적으로, $_GET
, $_POST
및 신뢰할 수없는 방문자와 같은 친구를 대하십시오 : 문을 인정하고, 신분증을 확인하고, 앱을 자유롭게 방황하지 못하게하십시오.
위 내용은 글로벌 주 길들이기 : PHP 슈퍼 글로벌을 효과적으로 사용하기위한 전략의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

파일 업로드의 핵심은 오류를 확인하고 파일 유형을 확인하고 파일을 이름 바꾸고 안전하게 이동하는 것입니다. 1. 먼저 $ _files [ 'error']가 upload_err_ok인지 확인하십시오. 2. FINFO를 사용하여 클라이언트 데이터를 신뢰하는 대신 실제 MIME 유형을 감지하십시오. 3. 파일 확장 및 제한 허용 유형을 확인하십시오. 4. 경로 트래버스를 방지하기 위해 bin2Hex (random_bytes (16))와 같은 임의 이름이있는 파일의 이름을 바꿉니다. 5. move_uploaded_file ()을 통해 업로드 디렉토리를 보호하기 위해 임시 디렉토리에서 파일을 이동합니다. 6. 스토리지 위치는 가능한 한 웹 루트 디렉토리 외부에 있어야하며 공개 해야하는 경우 스크립트 실행이 비활성화됩니다. 7. GD를 사용하십시오

$ _GetReRievesDataFromurlParameters, isvisibleandbookmarkable, 적합한 민감성, idempotentOperationslikeSearchorFiltering.2. $ _ PostSendsDatainTheRequestBody, PostPrivacyAndHighercApacity, State-ChangingActionSirectorformsubmissions

$ _get, $ _post, $ _server와 같은 PHP Hyperglobal 변수 HTTP 요청의 각 부분을 직접 매핑합니다. 1. $ _get? term = apple & page = 2와 같은 URL 쿼리 문자열에 해당합니다. 2. $ _post 프로세스는 사용자 이름 및 비밀번호와 같은 사후 요청 본문에서 데이터를 형성합니다. 데이터는 URL에 있지 않으며 많은 양의 IT를 전송할 수 있지만 HTTP가 보안을 보장해야합니다. 3. $ _server는 request_method와 같은 요청 메타 데이터를 포함합니다.

Alwaysvalidateandsanitizesuperglobalinputsusingfunctionslikefilter_input()orfilter_var()toensuredatameetsexpectedcriteriaandisfreeofmaliciouscontent.2.UsepreparedstatementswithparameterizedquerieswhenhandlingdatabaseoperationstopreventSQLinjection,ev

$ _session 및 $ _cookie는 PHP에서 웹 애플리케이션 상태 관리를 구현하기위한 핵심 메커니즘입니다. 1. $ _session은 서버를 통해 사용자 데이터를 저장하고 사용자 상태를 유지하기 위해 고유 한 세션 ID (일반적으로 phpsSessid라는 쿠키에 저장)에 의존합니다. 데이터 보안이 높은 초기화를 위해 SESSION_START () 호출이 필요합니다. 2. $ _cookie는 클라이언트 측에 소량의 데이터를 저장하며 로그인 상태, 사용자 기본 설정 또는 세션을 다시 연결하는 데 사용할 수 있습니다. 3. 보안 관행에는 세션 고정 공격을 방지하기 위해 로그인 한 후 SESSION_REGENEREATE_ID (TRUE) 호출이 포함됩니다.

superglobalsinphparepredefined, 항상 AvailablevariablevariablethatholddatafromuserInput, Serverenvironment, Sessions 및 More, AccessibleInallScopes

theglobalkeywordisslightlyfasterthan $ globalsduetodirectsymboltablebinding, buttheperformancedifferenceSnegligiblein MersonstApplications.2. $ globalsprovidesdirectaccessTotheGlobalsymboltablaWnsettingglobalVariblesFromWithinFinctions

피할 수없는 사람은 incintecivalccess를 개선하기 위해서는 approssuctionsuppertolaccess, 3. alwayssanitizeandvalidateinput를 개선합니다
