개발! 딱 깔끔하고 센스있게!

PHP 의 새로운 입력 필 터 는 $GET 또는 $POST 배열 을 읽 지 않 습 니 다. 본문

개발 스크랩 메모/PHP

PHP 의 새로운 입력 필 터 는 $GET 또는 $POST 배열 을 읽 지 않 습 니 다.

렉사이 2020. 12. 1. 22:39

PHP 5.2 에 좋 은 안전 함 수 를 추가 하 였 습 니 다.

'input filter' 라 고 해서 말 하지 않 았 습 니 다.

$name = $_GET['name']; 

당신 은 지금 말 할 수 있 습 니 다.

$name = filter_input (INPUT_GET, 'name', FILTER_SANITIZE_STRING); 

문자열 을 자동 으로 삭제 합 니 다.

그리고:

  • FILTER_SANITIZE_ENCODED
  • FILTER_SANITIZE_NUMBER_INT
  • FILTER_SANITIZE_EMAIL
  • FILTER_SANITIZE_URL

기다리다.

그래서 이것 은 매우 편리 한 안전 특성 이 므 로 나 는 그것 으로 완전히 전환 하고 싶다.

문 제 는...나 는 항상 $GET 와 $POST 배열 을 처리 하기 전에 다음 과 같이 이 를 처리 합 니 다.

$ GET ['name'] = '(기본 이름)';

그러나 filter input 는 $ GET 에 접근 할 수 없 는 것 같 습 니 다.

int (?) 형식의 'inpt GET' 를 읽 고 있 기 때 문 입 니 다.

$get 을 filter input 에서 읽 을 수 있다 면 다행 이 겠 지만:

$name = filter_input ( $_GET, 'name', FILTER_SANITIZE_STRING ); 

잘못 을 저 에 게 알려 주 십시오:

Warning: filter_input() expects parameter 1 to be long, array given. 

누가 내 가 할 수 있 을 것 이 라 고 생각 할 수 있 겠 습 니까?

  • manipulate the source of INPUT_GET (whereever it is) so that I can change its values before filter_input can read them
  • get filter_input to read $_GET

부록:


Rich 는 "어쨌든 배열 을 바 꾸 는 이 유 는 당연히 프로그램 을 통 해 추 가 된 내용 이 아니 라 입력 하 기 를 바 라 는 것" 이 라 고 물 었 다.

이것 은 입력 된 변 수 를 미리 처리 할 수 있 는 매우 편리 한 곳 입 니 다.

예 를 들 어:

  • set defaults (if $_GET['state'] = '' then $_GET['state'] = 'AL')
  • do manual processing (delete all spaces, etc.)
  • security (some of which will be done by filter_input now)

그리고 나 서 나 는 내 가 입력 변 수 를 받 았 을 때 이 변 수 는 안전 하고 효과 적 이라는 것 을 알 았 다.

물론 저 는 GET 배열 을 다른 배열 로 복사 하여 처리 할 수 있 습 니 다.

그러나 이것 은 불필요 한 절차 입 니 다.

I $GET 는 정상 적 인 작업 을 하 는 배열 이기 때문에 존재 하 는 시스템 배열 을 처리 하 는 것 이 의미 가 있 습 니 다.

대답 하 다.

filter var 와 filter var array 를 사용 하여 다시 배열 을 읽 도록 수 동 으로 강제 할 수 있 습 니 다.

$name = filter_var ( $_GET['name'], FILTER_SANITIZE_STRING ); 
Comments