카테고리 없음

HTTP GET 데이터 수신

hojomu 2023. 9. 14. 09:00

1. GET 방식이란?

http://domain.url?name1=value1&name2=value2

위의 형식으로 URL에 데이터를 담아서 보내는 것을 말한다.

즉 key 와 value가 함께 전달된다.

 

$variable = $_GET['key']

이 코드로 GET 방식 데이터를 변수에 저장해서 사용할 수 있다.

 

2. GET으로 데이터를 받을 시 유의할 점

  2-1 . 데이터 누락 여부 확인

isset 함수 사용
$variable = isset($_GET['key']) ? $_GET['city'] : ''

널 병합 연산자 사용
$variable = $_GET['key'] ?? $_GET['city'] : ''

키가 존재하면 ture 없다면 false를 반환하는 isset() 함수와 3항 연산자를 활용해서 누락 여부를 확인할 수 있다.

널 병합 연산자는 이를 간단하게 축약한 PHP7 기능이며, 데이터가 없으면 ''을 변수에 저장한다.

 

데이터가 누락되었다면, 오류 페이지를 표시할 수 있다

$valid = array_key_exists($variable, $variables);

if(!$valid) {
	http_response_code(404);
    header('Location : URL 또는 .php 파일');
    exit;
}

 

  2-2 . 결과 이스케이핑

-> 서버에 제공된 값이 페이지에 표시될 때, 악의적으로 악성스크립트를 실행시킬 수 없도록 이 값을 이스케이핑 해야한다.

태그와 속성, 엔티티를 생성하는 요소들이 여기에 해당된다 

태그 < >

속성 값 "  '

엔티티 &

따라서 위의 5가지 문자들은 엔티티 이름이나 엔티티 번호로 변경해야한다

 

htmlspecialchars($text [, $flag][, $encoding][, double_encode]);

위는 이스케이핑을 도와주는 함수이다.

$text : 이스케이핑 하려는 텍스트

$flag : 인코딩 되는 문자를 제어하는 옵션 ( 일반적으로 사용하는 옵션들이 명령어로 정리되어있다 )

$encoding : 문자열에서 사용되는 인코딩 스킴

$double_encode : HTML 엔티티는 앰퍼샌드(&) 로 실행하기 때문에, 문자열에 엔티티가 포함되어있으면 앰퍼샌드가 인코딩 되어 예약문자가 아닌 엔티티가 표시되게 한다. 이 매개변수에 false를 사용하면 문자열의 엔티티를 인코딩하지 않도록 PHP 인터프리터에 지시한다.