[php] 데이터 타입에 따른 보안 고려 사항

웹 애플리케이션을 개발하거나 운영할 때, 데이터 타입에 따라 보안을 고려해야 합니다. 이 글에서는 문자열, 숫자, 파일 등의 데이터 타입에 대해 보다 안전한 코드를 작성하는 방법을 알아보겠습니다.

문자열 (String)

보안을 고려할 때 문자열의 경우에는 주로 SQL InjectionCross-Site Scripting (XSS) 공격에 취약합니다.

  1. 입력 검증: 사용자가 입력한 문자열에 대해 정규 표현식을 사용하여 검증하는 것이 중요합니다. 허용된 문자만 받도록 필터링합니다.

  2. Escape: 데이터베이스에 저장하기 전에 escape 함수를 사용하여 특수문자를 이스케이프합니다.

$input = $_POST['input'];
$filteredInput = mysqli_real_escape_string($conn, $input);

숫자 (Number)

숫자 타입의 데이터는 잘못된 산술 연산으로 인한 보안 문제가 발생할 수 있습니다.

  1. 입력 제한: 특정 범위를 벗어나는 숫자가 입력되는 것을 방지하기 위해 입력값을 검증합니다.

  2. 타입 검증: 입력된 값이 숫자 타입인지 확인하고 형변환을 통해 안전한 연산을 수행합니다.

$input = $_POST['number'];
if (is_numeric($input)) {
    $number = (int)$input;
    // 안전한 연산 수행
}

파일 (File)

파일 업로드 기능을 제공하는 웹 애플리케이션에서는 악의적인 파일 업로드로 인한 보안 취약점에 주의해야 합니다.

  1. 파일 유형 검증: 허용되는 파일 유형만 허용하도록 검증합니다. MIME 유형을 확인하여 신뢰할 수 있는 파일인지 확인합니다.

  2. 파일 실행 제한: 업로드된 파일이 실행되지 않도록 서버 상에서 실행 권한을 제한합니다.

$allowedTypes = ['image/png', 'image/jpeg'];
$fileType = $_FILES['file']['type'];
if (in_array($fileType, $allowedTypes)) {
    // 파일 업로드 처리
}

이러한 방법들을 통해 데이터 타입에 따른 보안 취약점을 최소화하고 안전한 웹 애플리케이션을 구축할 수 있습니다.

참고 자료