PHP Security

Tip/PHP 2012. 12. 12. 00:10

1. 외부/입력 데이터 처리

 

GET/POST/COOKIE/SESSION 변수, DB, php config 등으로 전달되는 데이터는 변조될 수 있으므로 정규식을 사용하여 입력 처리.

 

function cleanInput($input){
    $clean = strtolower($input);
    $clean = preg_replace("/[^a-z]/", "", $clean);
    $clean = substr($clean,0,12);
    return $clean;
}

 

$userId = cleanInput($_POST['userid']);

 

입력받은 $_POST['userid'] 변수의 형식이 영문(소문자), 12자 이내로만 이루어져야 한다면,
위와 같이, 입력 변수를 체크할 수 있도록 처리합니다.
특히 사용자 입력값에 길이 제한을 두는 것은 여러 공격에 대하여 방지해 줍니다.

 

 

2. PHP config 의 보안 설정

 

php.ini 파일 편집

 

register_globals = off  
// GET,POST,COOKIE,SESSION,SERVER 등의 변수 공유 악용 방지
// php5.3 deprecated, 5.4 removed)

 

display_errors = off
// 오류정보 출력에 대한 악용 방지.
// 개발시에는 많은 오류가 보고되는 것이 좋지만, 완료 후에는 오류 대신에 파일로 대체.

 

 

3. SQL Injection 공격 회피

 

where username = '{$_GET['username'}' and password = '{$_GET['password']}' 의 경우
$_GET['password'] 에 악의적인 코드를 삽입하여 쿼리를 통과할 수 있습니다.
password 입력 항목에 ' or '1'='1 이라고 입력한다면,
where username = '' and password = '' or '1'='1' 이 되어 무조건 통과하게 됩니다.
이를 방지하기 위해 입력 값에 mysql_real_escape_string 함수를 사용하여 '등의 특수문자를 회피할 수 있도록 합니다.

 

 

4. 버퍼 오버플로우 공격 방지

 

특정 버퍼를 전복시키거나 다음 버퍼에 악성 코드를 삽입하여 데이터를 손상시키는 오버플로우에 대해서는 데이터 길이 제한을 두고,
16진 문자열에 대해서는 이 문자열을 제거하는 정규식을 추가합니다.

 

function cleanHex($input){
    $clean = preg_replace("![\][xX]([A-Fa-f0-9]{1,3})!", "",$input);
    return $clean;
}

 

$name = cleanHex($_POST['name']);

 

 

5. 교차 사이트 스크립팅(XSS) 공격 방지

 

사용자 입력 폼에서 이름, 이메일, 내용 등을 넣을 때 악성 스크립트로 쿠키 등의 정보를 훔칠 수 있습니다.
전달된 값에 태그 변환 strip_tags(), HTML 엔티티 변환 htmlspecialchars() 등을 사용해 공격을 차단하도록 합니다.

 

 

6. 원격 폼 전송 차단

 

폼 페이지를 저장하여 타 사이트에 게재하고 form action 값을 위장할 수 있습니다.
HTTP_REFERER 을 확인할 수도 있으나 가장 좋은 대처 방법은,
토큰을 생성하여 session 변수와 폼에 배치시키고 전송 뒤에 이 값들을 확인하는 방법입니다.
토큰을 무작위로 작성하려면 md5(), uniqid(), rand() 함수를 사용해야 합니다.

 

#form.php
$token = md5( uniqid( rand(), true ) );
$_SESSION['token']= $token;

 

<input type="hidden" name="token" value="<?=$token?>"/>

 

#action.php
if ( $_SESSION['token'] != $token ) {
    die( 'Invalid token!' );
}


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,