[PHP] 허가된 값 이외에 모든 문자 차단하기
POST나 GET(쿼리스트링) 등으로 값을 전달할때 이를 적절히 필터하는 것은 굉장히 중요한 것은 다들 알 것이다. XSS와 SQL Injection 등 중요 보안 위협 요소와 직결 되기 때문. 본인(개발자)이 생각한 값만 정확하게 받고 그외 나머지 모든 경우에 대해 예외처리를 해야 한다. 여기서는 일단 정확하게 필요한 값만 값는 테크닉 몇가지를 적는다. 예외 처리는 별도
1.숫자만 받기
$value = intval($_GET[‘value’]);
“00234” 같이 앞에 0으로 시작하는 숫자의 0을 살리려면
$value = preg_replace(‘/[^0-9]/’, ”, $_GET[‘value’]);
2. 영문자, 숫자만 받기
$value = preg_replace(‘/[^a-zA-Z0-9]/’, ”, $_GET[‘value’]);
3. 한글, 영문자, 숫자만 받기(인코딩 주의)
$value = preg_replace(‘/[^가-힣a-zA-Z0-9]/’, ”, $_GET[‘value’]);
4. 모든 데이터를 다 받아 DB에 넣을 때
$value = mysqli_real_escape_string($conn,$_GET[‘value’]); // 단 conn은 유효한 MySQLi 연결 인스턴스여야 함.
5. script와 같은 HTML Tag를 방지하려면
$value = htmlspecialchars($_GET[‘value’]); // 브라우저 상에는 괄호가 그대로 표시
만약 테그 자체를 지우려면
$value = strip_tags($_GET[‘value’]);