Computer >> 컴퓨터 >  >> 네트워킹 >> 네트워크 보안

워드프레스 데이터베이스 보호 방법 – 해킹 위협으로부터 사이트를 지키는 6가지 핵심 전략

워드프레스 데이터베이스를 효과적으로 보호하려면 먼저 워드프레스가 데이터베이스를 어떻게 사용하는지, 해커들이 자주 악용하는 취약점은 무엇인지, 그리고 이러한 취약점을 어떻게 예방할 수 있는지 이해해야 합니다.

워드프레스는 데이터베이스를 어떻게 사용할까?

워드프레스는 PHP를 스크립팅 언어로 사용해 데이터베이스에 데이터를 저장하고 불러오며, MySQL을 데이터베이스 관리 시스템으로 활용합니다. 즉, PHP 마크업 내부에서 SQL 쿼리가 실행되는 구조입니다. 예를 들어 워드프레스 기반 비즈니스 웹사이트에 로그인할 때, 실제로 로그인을 처리하고 사용자 ID를 추출·검증하며 프런트엔드에 올바른 프로필 정보를 표시하는 것은 바로 SQL입니다.

PHP와 SQL은 긴밀하게 협력하여 작동합니다. 덕분에 워드프레스는 사용자에게 동적인 콘텐츠 기반 경험을 제공할 수 있으며, 관리자, 편집자, 구독자처럼 특정 사용자 유형에 맞춰 콘텐츠를 맞춤화할 수도 있습니다.

플러그인과 테마 역시 워드프레스 데이터베이스에 데이터를 저장합니다. 이들 역시 PHP 마크업 내에서 SQL을 사용해 데이터베이스를 조회하고 콘텐츠를 동적으로 출력합니다. WP-DB Manager 같은 플러그인을 활용하면 데이터베이스를 더욱 손쉽게 관리할 수 있습니다.

관련 글: 시간을 절약해 주는 15가지 워드프레스 설정 팁

워드프레스 데이터베이스 보호 방법 – 해킹 위협으로부터 사이트를 지키는 6가지 핵심 전략

워드프레스 데이터베이스 보안 강화 방법

워드프레스 데이터베이스는 웹사이트의 두뇌라고 할 수 있습니다. 게시글, 페이지, 댓글, 태그, 사용자, 카테고리, 커스텀 필드 등 사이트의 모든 정보와 설정이 이곳에 저장되기 때문입니다. 그만큼 악의적인 공격자들의 주요 표적이 되며, 스패머와 해커들은 SQL 인젝션 공격을 위한 자동화 코드를 실행하기도 합니다. 다음 방법들을 통해 워드프레스 데이터베이스를 안전하게 보호하세요.

관련 글: 꼭 알아야 할 25가지 워드프레스 보안 모범 사례

1. 관리자 사용자명 변경

다른 CMS와 마찬가지로 워드프레스에도 기본 관리자 로그인 정보가 있습니다. 기본 관리자 계정을 그대로 두면 공격자가 불법적으로 웹사이트와 데이터베이스에 접근하기가 훨씬 쉬워집니다.

워드프레스의 기본 사용자명은 admin입니다. 아직 변경하지 않았다면 지금 바로 변경하세요.

  1. phpMyAdmin에 접속합니다.
  2. 아래 쿼리를 실행합니다. 사용자명이 admin에서 원하는 이름으로 변경됩니다.
    UPDATE {database_prefix}users SET user_login='anything' WHERE user_login='admin';
  3. 워드프레스 멀티사이트 환경이라면 grant_super_admin() 함수를 사용해 슈퍼 관리자 권한과 슈퍼 관리자 특권을 부여할 수 있습니다.

2. 관리자 ID 변경

워드프레스에서 기본 관리자 사용자명은 admin, 기본 관리자 사용자 ID는 1입니다. 수많은 SQL 인젝션 공격이 이 기본값을 악용해 왔습니다. 따라서 데이터베이스 보안을 위해 최대한 빨리 변경하는 것이 좋습니다. 관리자 사용자 ID를 변경하려면 다음 단계를 따르세요.

  1. phpMyAdmin에 접속합니다.
  2. 아래 쿼리들을 실행합니다.
UPDATE wp_users SET ID = 2807 WHERE ID = 1; UPDATE wp_posts SET post_author = 2807 WHERE post_author = 1; UPDATE wp_comments SET user_id = 2807 WHERE user_id = 1; UPDATE wp_usermeta SET user_id = 2807 WHERE user_id = 1; ALTER TABLE wp_users AUTO_INCREMENT = 2808

팁: 변경 작업 전에는 반드시 백업을 생성하는 것이 좋습니다. 또한 각 변경 후에는 웹사이트가 정상적으로 작동하는지 확인하여 수정 사항이 다른 기능에 영향을 주지 않는지 점검하세요.

워드프레스 멀티사이트의 경우 네트워크 내 각 사이트마다 몇 줄의 쿼리를 복제해서 실행해야 합니다:

UPDATE wp_2_posts SET post_author = 5487 WHERE post_author = 1; UPDATE wp_2_comments SET user_id = 5487 WHERE user_id = 1;

PHP와 $wpdb를 사용해 루프(반복문) 형태로 쿼리를 실행할 수도 있습니다.

3. 데이터베이스 접두사(Prefix) 변경

워드프레스의 기본 데이터베이스 접두사는 wp_입니다. 데이터베이스 보안을 위해서는 워드프레스 설치 과정 자체에서 기본 접두사를 변경하는 것이 강력히 권장됩니다.

워드프레스 데이터베이스 보호 방법 – 해킹 위협으로부터 사이트를 지키는 6가지 핵심 전략

아직 변경하지 않았다면 지금 바로 진행하세요. 아래 단계를 따르세요:

  1. FTP 클라이언트로 웹사이트에 접속합니다.
  2. 루트 디렉터리의 설정 파일 wp-config.php로 이동합니다.
  3. wp_ 접두사가 있는 줄을 찾아 변경합니다.
    $table_prefix = 'wp_ga2807_';
  4. 모든 기본 워드프레스 데이터베이스 테이블의 이름을 변경합니다.
    RENAME TABLE wp_comments TO wp_ga2807_comments;
    RENAME TABLE wp_commentmeta TO wp_ga2807_commentmeta;
    RENAME TABLE wp_links TO wp_ga2807_links;
    RENAME TABLE wp_options TO wp_ga2807_options;
    RENAME TABLE wp_postmeta TO wp_ga2807_postmeta;
    RENAME TABLE wp_posts TO wp_ga2807_posts;
    RENAME TABLE wp_terms TO wp_ga2807_terms;
    RENAME TABLE wp_termmeta TO wp_ga2807_termmeta;
    RENAME TABLE wp_term_relationships TO wp_ga2807_term_relationships;
    RENAME TABLE wp_term_taxonomy TO wp_ga2807_term_taxonomy;
    RENAME TABLE wp_usermeta TO wp_ga2807_usermeta;
    RENAME TABLE wp_users TO wp_ga2807_users;
  5. wp_ga2807_usermetawp_ga2807_options(구 wp_usermeta, wp_options 테이블) 내부의 모든 wp_ 문자열을 새 접두사로 교체합니다.
    UPDATE wp_ga2807_options SET option_name = REPLACE(option_name, 'wp_', 'wp_ga2807_') WHERE option_name LIKE 'wp_%';
    UPDATE wp_ga2807_usermeta SET meta_key = REPLACE(meta_key, 'wp_', 'wp_ga2807_') WHERE meta_key LIKE 'wp_%';
  6. 플러그인은 데이터베이스에 자체 테이블을 생성합니다. 이 테이블들도 반드시 이름을 변경해야 합니다. 예를 들어 WooCommerce는 널리 사용되는 워드프레스 플러그인입니다. WooCommerce 테이블 이름을 변경하려면 아래 쿼리를 실행하세요.
    RENAME TABLE wp_woocommerce_api_keys TO wp_ga2807_woocommerce_api_keys;
    RENAME TABLE wp_woocommerce_attribute_taxonomies TO wp_ga2807_woocommerce_attribute_taxonomies;
    RENAME TABLE wp_woocommerce_downloadable_product_permissions TO wp_ga2807_woocommerce_downloadable_product_permissions;
    RENAME TABLE wp_woocommerce_order_itemmeta TO wp_ga2807_woocommerce_order_itemmeta;
    RENAME TABLE wp_woocommerce_order_items TO wp_ga2807_woocommerce_order_items;
    RENAME TABLE wp_woocommerce_payment_tokenmeta TO wp_ga2807_woocommerce_payment_tokenmeta;
    RENAME TABLE wp_woocommerce_payment_tokens TO wp_ga2807_woocommerce_payment_tokens;
    RENAME TABLE wp_woocommerce_sessions TO wp_ga2807_woocommerce_sessions;

참고: 'Change Table Prefix' 같은 편리한 플러그인을 사용하면 데이터베이스 접두사를 손쉽게 변경할 수도 있습니다.

4. 엄격한 데이터베이스 사용자 권한 설정

엄격한 사용자 권한 설정은 데이터베이스 보안을 한층 더 강화합니다. wp-config.php 파일에 지정된 MySQL 사용자에게는 최소한의 권한만 부여해야 합니다. 설치 과정에서는 필요한 테이블과 객체를 생성하기 위해 데이터베이스 사용자에게 모든 권한이 부여되지만, 이는 어디까지나 임시 조치여야 합니다. 설치가 완료된 후에는 MySQL 사용자에게 DATA READ(데이터 읽기)와 DATA WRITE(데이터 쓰기) 권한만 있으면 충분합니다.

5. 정기적인 백업 생성

웹사이트나 데이터베이스를 변경하기 전에는 반드시 백업을 생성하세요. 다시 강조합니다. 반드시 백업하세요! 정기적인 백업은 감염 발생 시 매우 유용합니다. 백업을 복원한 뒤 감염된 파일만 제거하면 되기 때문입니다.

다만 백업을 복원하더라도 공격자가 악용한 취약점 자체는 여전히 남아 있습니다. Astra의 취약점 평가 및 침투 테스트에 가입하면 웹사이트에 숨어 있는 백도어와 보안 취약점을 모두 찾아낼 수 있습니다.

6. 미사용 커스텀 테이블 삭제

사이트에서 확장 기능(플러그인·테마)을 제거한 후에는 해당 데이터베이스의 커스텀 테이블을 삭제하는 것이 좋습니다. 그렇지 않으면 시간이 지날수록 사용하지 않는 테이블이 데이터베이스에 계속 쌓이게 됩니다. 일부 플러그인은 제거 시 웹사이트와 데이터베이스에서 자체 데이터를 자동으로 삭제하는 옵션을 제공하기도 합니다.

참고: 다시 설치할 일이 확실히 없는 플러그인의 테이블만 삭제하세요. 커스텀 테이블은 한 번 삭제하면 복구할 수 없습니다.

관련 글: 누구나 저지르는 7가지 흔한 워드프레스 실수

결론

올바른 조치를 모두 취했더라도 100%의 보안을 보장할 수는 없습니다. 해커들은 웹사이트와 데이터베이스에 침입하기 위한 새로운 방법을 끊임없이 찾아냅니다. 무엇보다 방화벽을 설치하는 것이 다가올 위협 요청으로부터 워드프레스를 지키는 가장 확실한 방법입니다. Astra 방화벽이 웹사이트 보안을 책임져 주는 동안, 여러분은 비즈니스 성장에만 집중할 수 있습니다.

이 글이 도움이 되셨나요? Facebook, Twitter, LinkedIn에서 친구들에게 공유해 보세요.