Apache 디렉토리 리스팅 — 내 서버 파일이 전부 노출되고 있었다 (2026)

Apache 디렉토리 리스팅 — 내 서버 파일이 전부 노출되고 있었다 (2026)

Apache 디렉토리 리스팅, 이름만 들으면 뭔가 기술적인 설정처럼 들리지만 실체는 꽤 무섭습니다. 블로그에 월급 계산기를 올리고 pearsoninsight.com/tools/에 접속해봤더니, 브라우저에 서버 디렉토리 구조가 그대로 보이는 겁니다. 폴더 안에 어떤 파일이 있는지, JSON 데이터 파일은 뭐가 있는지, 전부 목록으로 노출되고 있었습니다. 누구든 URL만 치면 내 서버 파일 구조를 들여다볼 수 있는 상태였던 거죠. 이 글에서는 Apache 디렉토리 리스팅이 뭔지, 왜 위험한지, 어떻게 끄는지를 직접 겪은 경험을 바탕으로 정리합니다.

Apache 디렉토리 리스팅이란

Apache 디렉토리 리스팅은 웹 서버의 특정 경로에 index.html이나 index.php 같은 기본 페이지가 없을 때, 해당 폴더 안의 파일 목록을 브라우저에 그대로 보여주는 기능입니다.

예를 들어 https://example.com/uploads/에 접속했는데 그 폴더에 index 파일이 없으면, Apache는 “Index of /uploads”라는 제목과 함께 폴더 안의 모든 파일과 하위 디렉토리를 목록으로 보여줍니다. 파일 이름, 크기, 수정 날짜까지 전부요.

개발 환경에서는 편리할 수 있지만, 운영 서버에서는 심각한 보안 취약점입니다.

Apache 디렉토리 리스팅 — 내가 직접 겪은 상황

블로그에 월급 계산기를 배포하면서 /var/www/html/tools/salary/ 경로에 파일을 올렸습니다. index.htmlsalary-data.json 두 개의 파일이 있었고, /tools/salary/로 접속하면 계산기가 정상적으로 뜹니다.

문제는 상위 경로인 /tools/였습니다. 이 경로에는 index 파일이 없었기 때문에 접속하면 이런 화면이 떴습니다.

Index of /tools
[ICO]  Name          Last modified    Size  Description
[DIR]  salary/       2026-02-12 09:00  -

지금은 salary 폴더 하나뿐이지만, 나중에 다른 도구를 추가하면 서버에 어떤 프로젝트가 있는지 전부 노출됩니다. salary-data.json도 URL만 알면 누구나 다운로드할 수 있는 상태였습니다.

Apache 디렉토리 리스팅이 왜 위험한가

단순히 “파일 목록이 보인다” 수준이 아닙니다. 실제로 발생할 수 있는 보안 위협을 정리합니다.

서버 구조 노출

공격자가 서버의 디렉토리 구조를 파악할 수 있습니다. 어떤 폴더가 있고, 어떤 파일이 있는지 알면 공격 대상을 좁힐 수 있습니다. 특히 backup/, admin/, config/ 같은 폴더가 노출되면 위험합니다.

민감한 파일 다운로드

설정 파일, 데이터베이스 백업, 로그 파일, 환경변수 파일(.env) 등이 디렉토리 리스팅을 통해 발견되고 다운로드될 수 있습니다. 제 경우에도 salary-data.json이 그대로 접근 가능한 상태였습니다. 이 파일에 민감한 정보가 있었다면 큰일이었을 겁니다.

숨겨둔 페이지 발견

테스트용으로 만든 페이지, 아직 공개하지 않은 프로젝트, 삭제한 줄 알았던 파일까지 전부 노출됩니다. “URL을 모르면 접근 못 하겠지”라는 생각은 Apache 디렉토리 리스팅 앞에서 무력해집니다.

Apache 디렉토리 리스팅 확인하는 법

본인 서버에 이 취약점이 있는지 확인하는 방법은 간단합니다.

방법 1: 브라우저에서 직접 확인

index 파일이 없는 경로에 접속해봅니다. 예를 들어 https://내사이트.com/wp-content/uploads/https://내사이트.com/wp-includes/에 접속했을 때 “Index of /”로 시작하는 파일 목록이 보이면 디렉토리 리스팅이 활성화된 상태입니다.

방법 2: curl 명령어로 확인

curl -s https://내사이트.com/wp-content/uploads/ | grep "Index of"

결과가 나오면 노출 중, 아무것도 안 나오면 안전합니다.

Apache 디렉토리 리스팅 비활성화하는 법

3가지 방법이 있습니다. 상황에 맞는 걸 선택하세요.

방법 1: Apache 설정 파일 수정 (권장)

가장 확실한 방법입니다. SSH로 서버에 접속한 뒤 Apache 설정 파일을 수정합니다.

sudo nano /etc/apache2/apache2.conf

<Directory /var/www/> 블록을 찾아서 Options 줄을 수정합니다.

# 변경 전 (위험)
<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

# 변경 후 (안전)
<Directory /var/www/>
    Options -Indexes +FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

핵심은 Options IndexesOptions -Indexes로 바꾸는 것입니다. 마이너스(-) 기호가 해당 옵션을 비활성화합니다.

저장 후 Apache를 재시작합니다.

sudo systemctl restart apache2

방법 2: .htaccess 파일 사용

Apache 설정 파일을 직접 수정할 수 없는 공유 호스팅 환경에서는 .htaccess 파일을 사용합니다. 웹 루트 디렉토리(/var/www/html/)에 .htaccess 파일을 만들거나 수정합니다.

Options -Indexes

이 한 줄만 넣으면 됩니다. 단, .htaccess가 작동하려면 Apache 설정에서 AllowOverride All이 설정되어 있어야 합니다.

방법 3: 빈 index.html 파일 생성

가장 간단한 임시 방편입니다. 노출되는 디렉토리에 빈 index.html 파일을 만들어 두면 파일 목록 대신 빈 페이지가 표시됩니다.

# 예: /tools/ 디렉토리에 빈 index.html 생성
sudo touch /var/www/html/tools/index.html

하지만 이 방법은 모든 디렉토리에 일일이 적용해야 하니까 방법 1이나 2를 쓰는 게 맞습니다. 빈 파일은 새 폴더를 만들 때마다 까먹기 쉽습니다.

Apache 디렉토리 리스팅 비활성화 후 확인

설정을 변경한 후 다시 해당 경로에 접속해봅니다. “Index of” 목록 대신 403 Forbidden 에러가 나오면 성공입니다.

Forbidden
You don't have permission to access this resource.

403이 뜨는 게 맞습니다. 파일 목록을 보여주는 것보다 접근을 거부하는 게 훨씬 안전합니다. 만약 403 대신 커스텀 에러 페이지를 보여주고 싶다면 .htaccess에 아래를 추가하면 됩니다.

ErrorDocument 403 /index.php

이러면 403 에러 시 메인 페이지로 리다이렉트됩니다.

Apache 디렉토리 리스팅 비활성화 후 403 Forbidden 화면

워드프레스에서 추가로 확인할 경로들

워드프레스를 운영한다면 Apache 디렉토리 리스팅이 노출될 수 있는 경로들이 정해져 있습니다. 아래 경로들을 브라우저에서 접속해보세요.

경로 노출 시 위험도 이유
/wp-content/uploads/ 중간 업로드한 이미지, 파일 목록 노출
/wp-content/plugins/ 높음 설치된 플러그인 목록 → 취약점 공격 대상 특정
/wp-content/themes/ 중간 사용 중인 테마 정보 노출
/wp-includes/ 낮음 워드프레스 코어 파일 (공개 정보이긴 함)
/wp-content/backups/ 매우 높음 백업 파일에 DB 정보가 포함될 수 있음

특히 /wp-content/plugins/가 노출되면 공격자가 설치된 플러그인 버전을 확인하고, 해당 버전의 알려진 취약점을 이용해 공격할 수 있습니다. Apache 공식 문서에서도 운영 환경에서는 Options -Indexes를 권장합니다.

Apache 디렉토리 리스팅 — 놓치기 쉬운 추가 보안 설정

디렉토리 리스팅을 끄면서 함께 적용하면 좋은 보안 설정들입니다.

서버 정보 숨기기

Apache는 기본적으로 에러 페이지에 서버 버전 정보를 노출합니다. 이것도 비활성화하는 게 좋습니다.

# /etc/apache2/conf-enabled/security.conf
ServerTokens Prod
ServerSignature Off

민감한 파일 접근 차단

.htaccess에 아래를 추가하면 .env, .git, 로그 파일 등 민감한 파일에 대한 직접 접근을 차단할 수 있습니다.

# .env, .git, 로그 파일 접근 차단
<FilesMatch "(\.(env|git|log|bak|sql)|~)$">
    Require all denied
</FilesMatch>

마무리 — Apache 디렉토리 리스팅, 5분이면 해결됩니다

Apache 디렉토리 리스팅은 서버를 처음 세팅하면 기본으로 켜져 있는 경우가 많습니다. AWS EC2에 Apache를 설치하고 워드프레스를 올렸다면, 높은 확률로 이 취약점이 활성화되어 있습니다. Options -Indexes 한 줄이면 해결되는 문제인데, 모르면 서버의 모든 파일 구조를 세상에 공개하고 있는 셈입니다.

지금 바로 https://내사이트.com/wp-content/uploads/에 접속해서 확인해보세요. “Index of”가 보이면 이 글을 따라 바로 수정하세요.

서버 보안과 관련된 다른 글도 참고하세요.

댓글 남기기