SQL 주입으로부터 WordPress 웹 사이트를 보호하는 방법

게시 됨: 2022-03-09

WordPress는 광범위한 잠재적 응용 프로그램으로 인해 가장 많이 사용되는 웹 사이트 구축 플랫폼 중 하나입니다. 온라인 상점을 만들거나 좋아하는 취미에 대한 블로그를 호스팅하거나 포럼을 통해 커뮤니티를 만들거나 대기업을 대표할 수 있습니다.

그러나 어떻게 사용하든 가장 중요한 책임은 사이트를 해커로부터 안전하게 유지하는 것입니다. 그렇기 때문에 SQL(Structured Query Language) 주입 공격을 방지하는 방법을 이해하는 것이 중요합니다.

좋은 소식은 이 악성 코드로부터 WordPress 사이트를 보호하기 위해 취할 수 있는 조치가 많이 있다는 것입니다. SQL 주입을 탐지, 제거 및 방지하는 방법을 배우면 귀중한 데이터를 효과적으로 보호하고 공격에 덜 취약하게 만들 수 있습니다.

SQL 주입이란 무엇이며 어떻게 작동합니까?

주입이 어떻게 작동하는지 이해하려면 먼저 SQL이 무엇인지 배우는 것이 도움이 됩니다. 이것은 데이터베이스 개발에 사용되는 공통 언어입니다.

웹사이트는 이를 사용하여 데이터베이스에서 중요한 정보를 검색하고 동적 콘텐츠를 생성합니다. 일부 SQL 데이터베이스에는 MySQL(WordPress 사이트), MongoDB 및 SQL Server가 포함됩니다.

WordPress 웹사이트는 데이터베이스를 사용하여 페이지, 게시물 및 댓글과 같은 사이트의 필수 데이터 및 콘텐츠를 관리합니다. 이 정보를 표로 정리합니다.

WordPress 데이터베이스의 테이블 보기

데이터베이스는 가장 민감한 데이터가 저장되는 곳입니다. 따라서 이를 노출하는 모든 공격은 심각한 결과를 초래할 수 있습니다.

SQL 인젝션(SQLI)은 사이버 범죄자가 WordPress 데이터베이스에 침투하고 조작하는 데 사용하는 일종의 해킹 방법입니다. 기본적으로 해커는 웹 사이트의 백엔드 코딩에서 허점을 악용하고 데이터 입력 필드에 악성 코드를 삽입할 수 있습니다.

이 코드를 사용하면 악의적인 행위자가 쿼리 문자열, 쿠키 및 <input> 요소를 사용하여 웹 요청을 통해 데이터베이스 서버에 SQL 명령을 실행할 수 있습니다. 즉, WordPress 데이터베이스에서 데이터를 생성, 액세스, 변경 및 제거할 수 있습니다.

이 문제가 발생할 수 있는 다양한 진입점이 있습니다. 가장 일반적으로 사용되는 입력 필드에는 가입, 로그인 및 문의 양식과 검색 창 및 장바구니가 포함됩니다.

웹사이트에 방문자가 전화번호를 입력할 수 있는 양식이 있다고 가정해 보겠습니다. 사이버 범죄자는 해당 입력 필드를 사용하여 관리자 사용자 이름과 암호를 요청하는 악성 코드를 삽입할 수 있습니다.

SQL 인젝션의 유형

SQL 인젝션에는 여러 가지 유형이 있습니다. 한 범주는 "대역 내"로 알려진 것입니다. 이것은 가장 간단한 주입 유형이며 오류 기반 공격을 포함합니다.

이 기술을 통해 해커는 삽입을 사용하여 데이터베이스 구조 및 테이블 이름에 대한 세부 정보를 얻습니다. 예를 들어, 오류 메시지는 쿼리에 포함된 테이블 이름을 제공할 수 있습니다. 그런 다음 해커는 이 정보를 사용하여 새로운 공격을 만들 수 있습니다.

또 다른 유형은 "블라인드 SQL 주입"이라고 하는 것입니다. 이것은 공격자가 사이트가 응답을 분석하는 방법을 찾기 위해 데이터베이스에 다양한 쿼리를 보낼 때입니다. 이렇게 하면 SQL 쿼리에 대한 응답을 조사하여 잠재적인 취약점을 식별하고 데이터베이스에 외부 소스로 데이터를 전송하도록 요청할 수 있습니다.

SQL 인젝션은 얼마나 흔한가요?

불행히도 SQL 주입 공격이 널리 퍼져 있습니다. 실제로 Akamai에서 발행한 보고서에 따르면 2017년에서 2019년 사이에 소프트웨어 애플리케이션에 대한 공격의 약 2/3가 SQL 인젝션으로 인한 것이었습니다.

별도의 2020 Vulnerability Stats Report에서도 SQL 인젝션이 가장 일반적인 치명적인 취약점의 42%를 차지한다고 밝혔습니다.

SQL 인젝션은 WordPress 기반 사이트, 특히 연락처 양식 및 검색 상자와 같은 입력 필드가 있는 사이트와 같이 SQL 데이터베이스를 사용하는 모든 웹 사이트에서 가능합니다.

SQL 주입이 위험한 이유

SQL 주입은 몇 가지 이유로 위험합니다. 첫째, 해커가 로그인 자격 증명이나 고객 데이터와 같은 민감한 정보를 훔칠 수 있는 기회를 제공합니다.

해커는 SQL 주입을 사용하여 데이터를 확보하고 훔칠 수 있을 뿐만 아니라 해당 데이터를 삭제하는 데 사용할 수도 있습니다. 즉, 웹 사이트를 실행하는 데 사용되는 개인 및 필수 정보를 잃을 위험이 있습니다.

또한 명예 훼손 및 수익 손실의 위험이 있습니다. 데이터 유출은 비즈니스에 피해를 줄 수 있으며 고객이나 팬의 신뢰를 잃을 수 있습니다.

또한 이러한 공격으로 인해 Google이 사이트를 차단할 수 있습니다. 이 목록에 오르면 많은 잠재 방문자가 귀하의 사이트가 안전하지 않다는 경고를 받게 됩니다. 이 사람들의 대부분은 돌아서고 다시는 돌아오지 않을 것입니다. 또한 Google은 검색 순위를 크게 낮추어 복구하기 어려운 유기적 트래픽의 장기적 손실로 이어질 수 있습니다.

SQL 인젝션을 감지하는 방법

SQL 주입 공격의 희생자가 되었음을 나타내는 몇 가지 징후가 있습니다. 하나는 사이트의 문의 양식을 통해 갑자기 많은 이메일을 받고 있다는 것입니다. 또 다른 지표는 이상한 팝업, 광고 및 오류 메시지를 받는 경우입니다. 특히 이러한 팝업이 대략적인 웹사이트로 리디렉션되는 경우입니다.

불행히도 SQL 주입 공격의 징후가 항상 그렇게 분명한 것은 아닙니다. 앞서 언급했듯이 때때로 해커는 웹사이트를 손상시키기보다 정보를 훔치기 위해 주입을 사용하려고 합니다. 따라서 그들은 탐지를 더 어렵게 만드는 더 미묘한 방법을 사용할 수 있습니다.

SQL 인젝션 감지 및 스캔 도구

타겟이 되었는지 확실히 알 수 있는 유일한 방법은 웹사이트에서 스캔을 수행하는 것입니다. 다행히 WordPress 사이트에서 SQL 삽입을 감지하는 데 도움이 되는 다양한 온라인 도구가 있습니다.

예를 들어 Pentest 도구를 사용하여 웹사이트를 두 번 무료로 스캔할 수 있습니다.

PenTest 도구 홈페이지

라이트 스캔 또는 전체 스캔의 두 가지 옵션이 있습니다. 후자의 경우 유료 플랜으로 업그레이드해야 합니다. 웹사이트의 URL을 입력하고 대상 스캔 버튼을 클릭하기만 하면 됩니다. 취약점이 있는 경우 스캔을 통해 취약점이 드러납니다.

WordPress 웹 사이트에서 SQL 주입을 제거하는 방법

1. 백업 복원

SQL 주입을 제거하는 가장 좋은 방법은 사이트 백업을 복원하는 것입니다. Jetpack Backup을 사용하는 경우 활동 로그를 사용하여 공격이 발생한 시간을 확인한 다음 해당 시점 이전의 백업을 복원하기만 하면 됩니다. 사이트가 해킹 전의 상태로 돌아갑니다.

그러나 어떤 경우에는 SQL 주입이 시간이 지남에 따라 조금씩 수행된다는 점에 유의하는 것이 중요합니다. 데이터가 손실될 수 있는 깨끗한 백업을 찾기 위해 꽤 멀리 돌아가야 할 수도 있습니다.

백업을 복원하면 사이트를 다시 가동할 수 있지만 중요한 데이터가 도난당한 경우에도 침해의 결과를 처리해야 합니다.

2. 웹사이트 청소 서비스 이용

또 다른 옵션은 타사 웹사이트 청소 서비스를 사용하여 사이트를 스캔하고 SQL 주입을 수정하는 것입니다. Sucuri는 하나의 옵션입니다. 웹사이트를 팀에 제출하고 나머지는 모두 처리하게 하십시오. 그들은 전문가이기 때문에 일반 개발자보다 더 효과적으로 데이터베이스에서 맬웨어를 제거할 수 있습니다.

3. 직접 주사를 제거

마지막으로 MySQL을 관리하고 작업한 경험이 있는 경우 데이터베이스를 수동으로 정리할 수 있습니다. 그러나 이것은 고급 기술이므로 무엇을 하고 있는지 모르는 경우 변경하면 문제가 발생할 수 있습니다.

향후 SQL 인젝션을 방지하는 방법

사이트가 100% 안전하다고 보장할 수 있는 방법은 없지만 공격 위험을 최소화하기 위해 취할 수 있는 조치는 있습니다. WordPress에서 SQL 주입을 방지하는 데 사용할 수 있는 8가지 방법을 살펴보겠습니다.

1. 데이터 유효성 검사(또는 삭제)

WordPress에서 SQL 주입을 방지하는 핵심은 웹 사이트에 데이터나 콘텐츠를 입력하는 데 사용할 수 있는 모든 입력 필드를 보호하는 것입니다. 여기에는 주석 섹션과 양식이 포함됩니다. 따라서 제출 시 이러한 필드에 입력된 데이터를 검증하고 삭제하는 것이 중요합니다.

입력 유효성 검사 및 삭제를 통해 사용자가 제출한 명령을 확인할 수 있습니다. 살균을 통해 명령을 변경할 수도 있습니다. 이러한 명령에 악성 코드나 문자열이 포함되지 않도록 하는 효과적인 방법입니다.

유효성 검사는 요청을 처리하기 전에 양식에 입력된 정보가 요청된 형식과 일치하는지 확인합니다. 예를 들어 이메일 주소에 대한 입력 필드가 있는 경우 '@' 기호가 없으면 데이터의 유효성이 검사되지 않습니다.

양식 데이터에 대한 유효성 검사를 만드는 가장 쉬운 방법은 양식에 대한 규칙을 설정하는 것입니다. 이를 위한 프로세스는 사용 중인 특정 플러그인에 따라 다릅니다. 예를 들어 Formidable Forms의 프리미엄 버전을 사용하는 경우 사용자 지정 입력 마스크 형식 을 추가할 수 있습니다. 텍스트 필드의 경우.

WordPress의 양식 필드에 유효성 검사 추가

입력 형식 요구 사항을 추가하면 SQL 주입의 위험을 제한할 수 있습니다. 삭제는 입력된 데이터가 검증된 후 안전하게 처리할 수 있도록 보장하는 데 도움이 될 수 있습니다.

대부분의 WordPress 양식 플러그인은 양식 데이터를 자동으로 삭제합니다. 그러나 추가 보안 조치를 추가할 수 있습니다. 개방형 답변보다 드롭다운 메뉴와 객관식 옵션을 사용하는 것이 좋습니다. 특수 문자의 사용을 제한할 수도 있습니다.

2. WordPress 보안 도구 설치

Jetpack의 WordPress 보안 플러그인은 사이트에서 SQL 주입으로 이어질 수 있는 취약점을 모니터링할 수 있습니다. 이것은 누군가가 이용하기 전에 문제를 해결할 수 있는 기회를 제공합니다.

다운타임 모니터링을 사용하면 사이트가 다운되는 순간을 알 수 있으므로 신속하게 대응할 수 있습니다. 그리고 실시간 백업을 통해 사이트를 완전히 복원할 수 있습니다.

또한 다음과 같은 보안 도구를 제공합니다.

  • 대부분의 문제에 대한 원 클릭 수정과 함께 WordPress 파일에 대한 맬웨어 검사
  • 댓글 및 문의 양식을 보호하는 스팸 방지 솔루션
  • 해커를 차단하는 무차별 대입 공격 보호

3. 웹사이트와 데이터베이스를 항상 최신 상태로 유지

오래된 소프트웨어와 도구를 사용하면 사이트에 해커가 악용할 수 있는 전체 범위의 취약점이 발생할 수 있습니다. 이것이 워드프레스 웹사이트를 항상 최신 상태로 유지하는 것이 중요한 이유입니다.

현재 WordPress 설치의 거의 절반이 가장 업데이트된 버전을 사용하지 않습니다. 따라서 항상 최신 버전의 WordPress를 실행하도록 자동 업데이트를 활성화하는 것을 고려할 수 있습니다.

Core 업데이트에 대해 이 작업을 수행하려면 다음으로 이동할 수 있습니다. 웹사이트의 루트 디렉토리에 있는 wp-config.php 파일. 다음으로 다음 코드 조각을 복사하여 파일에 붙여넣습니다.

 define( 'WP_AUTO_UPDATE_CORE', true );

플러그인으로 이동하여 플러그인 에 대한 자동 업데이트를 활성화할 수 있습니다. 관리자 대시보드의 화면입니다. 그런 다음 맨 오른쪽 열에서 자동 업데이트를 활성화 합니다.

WordPress에서 자동 업데이트 활성화

취약점을 최소화하려면 사이트에서 사용하지 않는 플러그인이나 테마를 제거하는 것이 좋습니다. SQL 버전을 업데이트하는 것도 현명합니다. 호스팅 제어판에 cPanel을 사용하는 경우 대시보드에서 MySQL 소프트웨어를 업데이트할 수 있습니다. 호스팅 제공업체에 따라 자동 SQL 업데이트를 활성화할 수 있습니다.

4. WordPress 데이터베이스 접두사 변경

기본적으로 WordPress를 설치할 때마다 CMS는 "wp_"를 데이터베이스 접두사로 사용합니다. 해커가 SQL 주입을 통해 취약점을 악용할 수 있으므로 이것을 다른 것으로 변경하는 것이 좋습니다.

시작하기 전에 데이터베이스를 백업해야 합니다. 이렇게 하면 문제가 발생하더라도 안전한 버전으로 복원할 수 있습니다.

그런 다음 FTP 클라이언트 또는 호스트의 파일 관리자를 통해 사이트에 연결하고 사이트의 루트 디렉토리에 있는 wp-config.php 파일을 찾습니다. 파일에서 table_prefix 줄을 찾은 다음 "wp_"를 다른 것으로 변경합니다.

 $table_prefix  = 'wp_a12345_';

완료되면 파일을 저장합니다. 그게 다야!

5. 방화벽 사용

SQL 주입으로부터 보호하기 위해 사용할 수 있는 또 다른 전략은 방화벽을 설치하는 것입니다. 이것은 WordPress 사이트로 들어오는 데이터를 모니터링하고 제어하는 ​​데 도움이 되는 네트워크 보안 시스템입니다. 이것은 SQL 주입 공격을 포함한 악성 코드를 포착하고 걸러낼 수 있습니다.

사용할 수 있는 다양한 WordPress 방화벽 도구가 있습니다. 일부 인기 있는 옵션에는 Wordfence 및 Sucuri가 있습니다. 이러한 도구는 공격자가 명령을 제출하는 것을 막지는 못하지만 실제로 사이트에 액세스하는 것을 차단하는 데 도움이 될 수 있습니다.

6. 사용 중인 워드프레스 버전 숨기기

WordPress 사이트 버전을 공개적으로 사용 가능하게 하면 각 버전이 고유한 세트와 함께 제공되므로 공격자가 알려진 취약점을 더 쉽게 악용할 수 있습니다. 따라서 사이트를 보호하기 위해 사용 중인 버전을 숨기는 것이 좋습니다.

빠르고 쉽습니다. 시작하려면 다음 코드 스니펫을 복사하기만 하면 됩니다.

 remove_action('wp_head', 'wp_generator');

다음으로 현재 WordPress 테마의 functions.php 파일로 이동합니다. FTP 클라이언트를 사용하거나 호스트의 파일 관리자를 사용하여 WordPress의 테마 편집기 에서 직접 이 작업을 수행할 수 있습니다. 파일 내에 코드를 붙여넣은 다음 변경 사항을 저장합니다.

7. 불필요한 데이터베이스 기능 제거

WordPress 데이터베이스의 기능이 많을수록 공격에 더 취약합니다. SQL 주입의 위험을 최소화하려면 데이터베이스를 정규화하고 불필요한 기능과 콘텐츠를 제거하는 것을 고려하십시오.

간단히 말해서 데이터베이스 정규화는 데이터를 구성하는 프로세스를 나타냅니다. 이렇게 하는 목적은 데이터베이스에서 중복 데이터를 제거하고 모든 데이터 종속성이 의미가 있는지 확인하는 것입니다. 데이터베이스를 제1정규형으로 두면 이 작업을 수행할 수 있습니다.

WordPress 데이터베이스를 정리하기 위한 보다 초보자 친화적인 옵션을 원하면 플러그인을 사용할 수 있습니다. WP-Optimize와 같이 선택할 수 있는 몇 가지 확실한 옵션이 있습니다.

이 프리미엄 플러그인을 사용하면 phpMyAdmin을 통해 SQL 명령을 수동으로 실행할 필요 없이 데이터베이스를 정리할 수 있습니다. 대신 WordPress 대시보드에서 직접 데이터베이스를 최적화하는 데 사용할 수 있습니다.

데이터베이스 테이블 최적화 옵션

휴지통 및 승인되지 않은 댓글을 포함하여 데이터베이스에서 모든 불필요한 정보를 제거합니다. WP-Optimize를 사용하면 한 번의 클릭으로 MySQL 데이터베이스 테이블을 조각 모음할 수도 있습니다.

8. 사용자 접근 및 권한 제한

웹사이트에서 WordPress 사용자에게 다양한 역할을 할당할 수 있습니다. 이는 가입자에서 관리자에 이르기까지 다양합니다. 각 역할에 따라 부여되는 액세스 권한과 부여되는 "기능"을 제어할 수 있습니다.

보안을 강화하려면 전체 관리자 액세스 및 사용자 권한이 있는 역할 수를 제한하는 것이 가장 좋습니다. 데이터를 변경하고 입력할 수 있는 사람이 적을수록 SQL 주입 공격에 직면할 가능성이 줄어듭니다.

WordPress에서 사용자 역할 및 권한을 사용자 지정하려면 사용자 → 모든 사용자 로 이동할 수 있습니다.

대시보드의 WordPress 사용자

그런 다음 액세스 및 권한을 제한하려는 사용자 이름 아래에 있는 편집 링크를 클릭합니다. 다음 화면에서 드롭다운 역할 메뉴를 사용하여 역할을 변경할 수 있습니다.

WordPress 사용자 역할을 관리할 때 더 이상 사용하지 않는 계정도 삭제하는 것이 좋습니다. 오래된 역할을 제거하면 취약성을 최소화할 수 있습니다.

9. nulled 플러그인 사용을 피하세요

Nulled 플러그인은 도난당하여 무료로 제공되는 프리미엄 도구입니다. 그것들이 대단한 것처럼 보일 수도 있지만, 작업에 대한 대가를 지불하지 않아 원래 개발자에게 피해를 줄 뿐만 아니라 해킹의 위험도 있습니다.

Nulled 플러그인은 악성 코드와 백도어로 가득 차 있어 해커가 사이트에 쉽게 접근할 수 있습니다. 어떤 대가를 치르더라도 이를 피하고 대신 평판이 좋은 출처의 플러그인을 사용하십시오.

SQL 주입으로부터 WordPress 사이트 보호

사이버 범죄자의 위협으로부터 웹 사이트와 데이터를 보호하려면 사이트에 액세스하는 데 사용되는 가장 일반적인 방법을 알고 있어야 합니다. 데이터베이스의 보안을 강화한다는 것은 SQL 인젝션에 정통하다는 것을 의미합니다.

이 게시물에서 논의한 것처럼 SQL 주입은 민감한 데이터 노출에서 콘텐츠 및 수익 손실에 이르기까지 WordPress 사이트에 피해를 줄 수 있습니다. 다행히도 주입 공격을 감지, 제거 및 방지하기 위해 취할 수 있는 몇 가지 단계가 있습니다.

어떤 웹사이트도 완전히 안전하지는 않지만 위의 팁과 기술을 따르면 SQL 주입의 희생자가 될 가능성을 크게 줄일 수 있습니다.