Daniel's Knowledge Storage
넘겨 받은 값 일단 오염됐다고 보라 - PHP 보안 본문
크리스 쉬플릿(Chris Shiflett) 저,「PHP 보안(Essential PHP Security」에서 저자는 이 책에서
가장 먼저, 넘겨받은 값(POST, GET, REQUEST)의 정화(淨化)에 대해 몇 번이고 강조한다.
해킹의 대부분은 바로 이 값을 넘어온 그대로 사용하는 실수로 인해 벌어진다고 한다.
심지어 저자는 (MySql) DB에 입력된 데이터 마저도 신뢰해서는 안 된다고 한다.
아무튼, 악의적인 사용자가 아니라 하더라도 넘어온 값을 그대로 사용한다면
예기치 않은 오류들이 발생할 수도 있다.
따라서, 코드의 상단에 간단히 아래와 같이 넘어온 값은 정화작업을 거치는 것이 좋다.
이를테면,
$clean_text = htmlspecialchars ( $_POST['text'] );
이렇게 말이다.
하지만 넘어오는 모든 값을 일일히 이렇게 하나씩 변수에 담는다는 것은 비효율적일 수 있다.
통상적으로는 이렇게 할 수 있다.
foreach ( $_POST as $key => $value ) { $clean_post[$key] = htmlspecialchars ( $value ); }
하지만 만일, POST, GET, REQUEST 값 모두를 정화하려면 또 코드가 반복되고 만다.
아래와 같이 말이다.
foreach ( $_GET as $key => $value ) { $clean_get[$key] = htmlspecialchars ( $value ); }
foreach ( $_POST as $key => $value ) { $clean_post[$key] = htmlspecialchars ( $value ); }
foreach ( $_request as $key => $value ) { $clean_request[$key] = htmlspecialchars ( $value ); }
이 코드를 더 줄이기 위해서, PHP 함수 array_map을 활용한다. (☞ PHP.net의 array_map 함수 설명 바로가기)
function _cleaning ( $v ) { return ( htmlspecialchars ( trim ( $v ) ) ); }
$cleanGet = array_map ( '_cleaning', $_GET );
$cleanPost = array_map ( '_cleaning', $_POST );
$cleanRequest = array_map ( '_cleaning', $_REQUEST );
(위 코드에서는 htmlspecialchars 함수 외에 trim 함수를 더 넣었다.
위와 같이 사전작업을 한 후에 $cleanX 변수를 사용하면
더욱 안전한 프로그래밍이 되지 않을까?
[출처] [PHP보안] 넘겨받은 값은 일단 오염됐다고 보라.|작성자 지앤미
'Develop > PHP' 카테고리의 다른 글
검색 엔진이란? 검색엔진 쉽게 만들어 보기! - php기본 (0) | 2009.06.15 |
---|---|
php보안을 위안 30가지 방안 (0) | 2009.06.15 |
클래스 사용 기본 활용 - DB컨넥트 (0) | 2009.06.15 |
사용하시는 홈페이지를 방어하기위한 간단한 php (mysql)함수를 소개합니다. (0) | 2009.06.15 |
phpmyadmin 설치법 (0) | 2008.07.06 |