컴퓨터 프로그램이 데이터를 메모리에 저장할 때 할당된 메모리공간을 초과하여 데이터를 저장할때 발생하는 오류입니다.
할당된 저장공간보다 더 큰 값의 입력이 가능하고 이로 인한 오류 발생시 의도되지 않은 정보 노출, 비인가 접근 및 사용, 악의적인 코드 유도등 위협이 있습니다.
로그인페이지, 로그인 후 정보변경페이지, 검색어 입력, 게시글작성, URL파라미터 값 등에서 대량의 (임의의)문자열 입력하여 에러 페이지나 오류가 발생하는지 점검합니다.
| 내용 | |
|---|---|
| 대상 | 웹 어플리케이션 소스코드 |
| 판단기준 | 양호-파라미터 값에 오류x / 취약-파라미터 값에 오류o |
| 조치방법 | 입력값 범위 제한/ 허용범위를 벗어나는 경우 에러페이지가 반환되지 않게 조치 |
C,C++같은 저수준의 메모리를 관리하는 언어에서 발생하며 php같은 메모리관리가 자동적으로 이루어지는 언어에서는 발생하지 않습니다.
버퍼오버플로우는 아니지만 한계를 넘는 파일 업로드로 DOS공격을 할 수 있습니다.
ex)
fileupload.html
<form action="" method="post" enctype="multipart/form-data">
파일 선택: <input type="file" name="file">
<input type="submit" value="업로드">
</form>
upload.php
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// 파일이 업로드되었는지 확인
if (isset($_FILES['file'])) {
// 파일 정보를 가져옴
$file = $_FILES['file'];
$fileSize = $file['size'];
// 파일 크기 제한 없음 (이 부분이 문제)
// 실제 버퍼 오버플로우는 아니지만, 큰 파일을 통해 서버에 과도한 부담을 줄 수 있음
// 파일을 임시 위치에서 업로드 위치로 이동
$uploadDir = 'uploads/';
$uploadFile = $uploadDir . basename($file['name']);
if (move_uploaded_file($file['tmp_name'], $uploadFile)) {
echo "파일이 성공적으로 업로드되었습니다.";
} else {
echo "파일 업로드 중 오류가 발생했습니다.";
}
}
}
?>
$maxFileSize = 10 * 1024 * 1024; // 10MB
if ($file['size'] > $maxFileSize) {
die("파일이 너무 큽니다. 최대 10MB까지 업로드 가능합니다.");
}