워드프레스 uploads 폴더에서 PHP 파일 실행을 금지하는 방법

2

워드프레스(WordPress)에서는 기본적으로 관리자나 허가된 사용자들이 테마, 플러그인, 이미지, 동영상 등을 쉡사이트에 업로드할 수 있도록 특정 디렉터리가 쓰기 가능하도록 설정되어 있습니다.

하지만 해커를 비롯한 악의적인 사용자가 이 기능을 악용하여 백도어 파일이나 멀웨어(악성코드)를 워드프레스 사이트에 업로드할 수 있습니다.

멀웨어에 감염된 많은 사이트에서 uploads 폴더 아래에 PHP 파일 형태의 백도어 파일이 생성되어 있는 것을 확인할 수 있습니다.

uploads 폴더나 특정 폴더에서 PHP 파일을 실행하지 못하도록 하여 워드프레스 사이트의 보안을 강화할 수 있습니다. 아래에서는 uploads 폴더에서의 경우를 예를 들어 설명하고 있지만, 다른 폴더에도 적용 가능합니다.

uploads 폴더에서 PHP 파일이 실행되지 않도록 설정하는 방법

FTP나 cPanel의 File Manager 툴을 사용하여 /wp-content/uploads 폴더에 .htaccess 파일을 만들어 백도어 파일이 실행되지 않도록 할 수 있습니다.

FTP에 접속하여 작업하는 경우 /wp-content/uploads 폴더로 이동한 후, 마우스 오른쪽 버튼을 클릭하면 컨텍스트 메뉴가 표시됩니다.

워드프레스 uploads 폴더에서 php 파일 실행 금지

FTP 클라이언트 프로그램으로 파일질라(FileZilla)를 사용하는 경우 "새 파일 만들기"를 클릭하고 ".htaccess" 파일을 생성하도록 합니다. 일부 웹호스팅에서는 권한이 없다는 에러 메시지가 표시될 수 있습니다. 그런 경우 웹호스팅 업체에 연락하여 문제를 상의해보시기 바랍니다.

cPanel을 제공하는 웹호스팅(예: 블루호스트)에서는 cPanel에 로그인한 후에 File Manager에 접속하여 .htaccess 파일을 만들 수 있습니다.

해외호스팅 블루호스트 사이트그라운드 cPanel 내의 File Manager 실행

.htaccess 파일에 다음 코드를 추가하고 저장하도록 합니다.

# Kill PHP Execution
<Files ~ "\.ph(?:p[345]?|t|tml)$">
   deny from all
</Files>

uploads 폴더에 php 파일을 하나 올리고 테스트해보면 브라우저에 다음과 같은 오류 메시지가 표시되면서 PHP 파일이 실행되지 않는 것을 확인할 수 있습니다.

403 Permission Denied
You do not have permission for this request /wp-content/uploads/info.php

Nginx 웹서버를 이용하는 경우 다음과 같은 지시문을 추가할 수 있습니다.

# Disallow PHP in upload folder  
    location /wp-content/uploads/{  
            location ~ \.php$ {  
                    deny all;                 
                }  
        }  
// 출처: https://community.easyengine.io/t/prevent-execution-of-php-files-from-sensitive-folders/832

워드프레스 코어 프로그램, 테마, 플러그인을 항상 최신 버전으로 업데이트하고 보안 플러그인을 설치하면 안전하게 워드프레스 사이트를 운영할 수 있습니다. 정기적으로 사이트를 백업하여, 만약의 사태에 대비하는 것도 중요합니다.

참고:

2 개 댓글

  1. 굉장히 좋은 팁인데, .htaccess를 사용하면 성능엔 아무런 문제가 없을까요??
    포스트에 포함된 이미지 파일 하나하나 불러올 때마다 .htaccess에 접근하는 건지 궁금하네요.

    • 안녕하세요?

      https://stackoverflow.com/questions/25063677/how-much-does-using-htaccess-files-slow-down-website-performance-especially-wit 글을 참고해보시기 바랍니다.

      Having a large .htaccess does have a cost. Ours is currently ~1500 lines and we benchmarked the time spent parsing it at around 10-12ms on a production webserver. Hardware makes a difference obviously, but you can fairly safely assume that the cost of that 3000 line .htaccess is around 25-35ms per request.

      사이트 속도에 영향을 미칠 수 있을 것 같습니다.
      코드를 추가하여 사이트 속도에 영향을 미치는지 확인해보시기 바랍니다.

댓글 남기기

댓글을 입력해주세요!
이름을 입력해주세요