[php] 데이터 타입에 따른 보안 고려 사항
웹 애플리케이션을 개발하거나 운영할 때, 데이터 타입에 따라 보안을 고려해야 합니다. 이 글에서는 문자열, 숫자, 파일 등의 데이터 타입에 대해 보다 안전한 코드를 작성하는 방법을 알아보겠습니다.
문자열 (String)
보안을 고려할 때 문자열의 경우에는 주로 SQL Injection과 Cross-Site Scripting (XSS) 공격에 취약합니다.
-
입력 검증: 사용자가 입력한 문자열에 대해 정규 표현식을 사용하여 검증하는 것이 중요합니다. 허용된 문자만 받도록 필터링합니다.
-
Escape: 데이터베이스에 저장하기 전에 escape 함수를 사용하여 특수문자를 이스케이프합니다.
$input = $_POST['input'];
$filteredInput = mysqli_real_escape_string($conn, $input);
숫자 (Number)
숫자 타입의 데이터는 잘못된 산술 연산으로 인한 보안 문제가 발생할 수 있습니다.
-
입력 제한: 특정 범위를 벗어나는 숫자가 입력되는 것을 방지하기 위해 입력값을 검증합니다.
-
타입 검증: 입력된 값이 숫자 타입인지 확인하고 형변환을 통해 안전한 연산을 수행합니다.
$input = $_POST['number'];
if (is_numeric($input)) {
$number = (int)$input;
// 안전한 연산 수행
}
파일 (File)
파일 업로드 기능을 제공하는 웹 애플리케이션에서는 악의적인 파일 업로드로 인한 보안 취약점에 주의해야 합니다.
-
파일 유형 검증: 허용되는 파일 유형만 허용하도록 검증합니다. MIME 유형을 확인하여 신뢰할 수 있는 파일인지 확인합니다.
-
파일 실행 제한: 업로드된 파일이 실행되지 않도록 서버 상에서 실행 권한을 제한합니다.
$allowedTypes = ['image/png', 'image/jpeg'];
$fileType = $_FILES['file']['type'];
if (in_array($fileType, $allowedTypes)) {
// 파일 업로드 처리
}
이러한 방법들을 통해 데이터 타입에 따른 보안 취약점을 최소화하고 안전한 웹 애플리케이션을 구축할 수 있습니다.