웹사이트가 갑자기 느려지고 트래픽이 이유 없이 줄어들었나요? 의도하지 않은 광고가 표시되거나, 직접 삽입한 적 없는 팝업이 나타나나요? 그렇다면 워드프레스에 X-XSS-Protection 보안 헤더가 필요한 시점일 수 있습니다.
이런 증상은 워드프레스 사이트가 XSS(교차 사이트 스크립팅) 공격을 당했다는 신호일 가능성이 큽니다. XSS 공격은 매우 흔하게 발생하지만, 그 피해는 상상 이상으로 심각합니다.
CVE Details에 따르면 2009년 이후 약 9,903건의 주요 XSS 공격이 기록되었습니다. 물론 신고되지 않은 공격까지 포함하면 실제 피해 규모는 훨씬 더 클 것입니다.
해커들은 XSS 취약점을 이용해 데이터를 탈취하고, 자신들이 만든 광고(주로 불법 약물이나 성인용 콘텐츠)를 노출하며, 고객을 기망하는 등 다양한 악의적인 행위를 저지릅니다.
하지만 다행히도 XSS로부터 웹사이트를 손쉽게 보호할 방법이 있습니다. 이 글에서는 워드프레스에 X-XSS 보안 헤더를 추가하는 방법을 소개합니다. 이 헤더를 설정하면 모든 XSS 공격 시도를 강제로 차단할 수 있습니다.
먼저 응답 헤더가 무엇인지, 어떻게 구현하는지 살펴본 뒤, 워드프레스 사이트를 XSS를 비롯한 각종 공격으로부터 완벽하게 지킬 수 있는 추가 보안 팁까지 함께 알아보겠습니다.
핵심 요약: 올인원 MalCare 보안 솔루션으로 워드프레스 사이트를 XSS 공격과 각종 멀웨어로부터 보호하세요. 플러그인을 설치하기만 하면 사이트가 정기적으로 모니터링·스캔되어 악성 공격으로부터 안전하게 관리됩니다.
워드프레스에서 XSS(교차 사이트 스크립팅)란 무엇일까요?
교차 사이트 스크립팅(XSS)은 해커가 웹사이트의 사용자 입력 영역에 존재하는 보안 취약점을 악용하는 인젝션(injection) 공격의 일종입니다. 사용자 입력 영역이란 검색창, 댓글 창, 문의 폼, 로그인 필드처럼 방문자로부터 데이터를 받아들이는 모든 곳을 의미합니다.
해커는 이러한 필드에 입력할 수 있는 정보의 종류를 다양한 방식으로 악용합니다. 그래서 XSS 공격에도 여러 유형이 존재하는데, 여기서는 가장 대표적인 두 가지를 자세히 설명하겠습니다.
저장형(지속형) XSS 공격
이 공격은 웹사이트의 방문자를 주된 표적으로 삼습니다. 구체적인 과정을 살펴보겠습니다.
examplesite.com이라는 사이트가 블로그 게시글에 댓글을 달 수 있게 한다고 가정해 보겠습니다. 방문자는 댓글을 통해 의견을 남기거나 질문할 수 있고, 제출된 댓글은 데이터베이스에 전송되어 저장됩니다.
원래라면 댓글 필드에는 데이터베이스로 전송되기 전에 데이터를 검증하는 설정이 마련되어 있어야 합니다.
그러나 이 설정이 제대로 되어 있지 않으면, 일반 텍스트 댓글과 코드 한 줄을 구분할 수 없게 됩니다.
댓글 섹션이 모든 입력을 무조건 허용한다는 사실을 파악한 해커는 JavaScript 코드를 삽입할 수 있고, 겉보기에는 평범한 댓글처럼 보이게 됩니다.

문제는 해커가 원래 허용되어서는 안 되는 '클릭하세요' 같은 버튼까지 심어놓았다는 점입니다. 사이트 운영자는 이를 눈치채지 못하기 쉽습니다.
이후 일반 방문자(공격 대상)가 해당 페이지에 접속하여 버튼을 클릭하면, 악성 코드가 실행되어 방문자의 브라우저를 감염시킵니다. 해커는 이를 통해 방문자 브라우저의 쿠키 데이터를 빼낼 수 있습니다.
쿠키에는 저장된 로그인 정보, 신용카드 정보, 개인 데이터 등 온갖 정보가 담겨 있습니다. 웹사이트에 로그인할 때 '브라우저에 비밀번호를 저장하시겠습니까?'라는 팝업을 본 적이 있을 것입니다.

일반 사용자는 보통 페이스북, 이메일, 쇼핑몰, 업무용 사이트, 유튜브 등 여러 탭을 동시에 열어둡니다. 해커가 XSS 공격에 성공하면 브라우저에서 열려 있는 모든 사이트의 쿠키를 훔칠 수 있습니다. 바로 이 때문에 '교차(cross) 사이트'라는 이름이 붙은 것입니다. 해커는 탈취한 정보로 고객을 기망하거나 더 큰 규모의 공격을 감행합니다.
이 공격은 직접적으로는 웹사이트를 공격하지 않지만, 그 파장은 심각합니다. 사이트를 방문하는 모든 방문자가 위험에 노출되며, 구글은 신속하게 사이트를 블랙리스트에 올리고 호스팅 업체는 계정을 정지시킬 수 있습니다.
반사형(비지속형) XSS 공격
이번에는 해커가 웹사이트 자체를 공격해 접근 권한을 얻는 방식입니다. 작동 원리를 살펴보겠습니다.
사이트에 고객이 원하는 상품을 빠르게 찾을 수 있는 검색창이 있다고 가정해 봅니다. 이 검색창은 원래 알파벳 문자만 입력받아야 하지만, 잘못 설정되어 특수 문자와 숫자까지 허용하고 있다면 사이트의 검색 엔진은 사용자가 입력한 일반 텍스트와 해커가 삽입한 악성 코드를 구분할 수 없습니다.
악성 코드가 삽입되면 웹사이트의 데이터베이스로 전달되어 실행됩니다. 이 순간 해커는 웹사이트에 대한 접근 권한을 얻고 본격적으로 악의적인 활동을 시작할 수 있습니다. 더 심각한 경우, 여러분의 사이트를 발판 삼아 DDoS 공격 같은 대규모 해킹을 감행할 수도 있습니다.
XSS 공격이 얼마나 치명적인지, 그리고 왜 우리 사이트를 보호해야 하는지 이제 충분히 이해했습니다. 그렇다면 HTTP 보안 헤더가 어떻게 XSS 공격을 막아주는지 알아보겠습니다.
HTTP 보안 헤더란 무엇일까요?
HTTP(Hypertext Transfer Protocol)는 인터넷을 통해 메시지가 어떤 형식으로 작성되고 전송되는지 정의하는 프로토콜입니다.
구글 크롬이나 모질라 파이어폭스 같은 최신 웹 브라우저에는 HTTP 응답 헤더가 내장되어 있습니다. 이 보안 헤더는 주로 상태 코드, 콘텐츠 인코딩, 콘텐츠 보안, 캐시 제어와 같은 메타데이터로 구성됩니다.
응답 헤더는 브라우저에게 웹사이트와 상호작용할 때 어떻게 동작해야 하는지 지시합니다. 예를 들어 사용자가 크롬을 열어 웹사이트에 접속할 때, 브라우저·웹사이트·웹 서버 간의 통신 방식은 HTTP 헤더가 결정하는 데 중요한 역할을 합니다.
이해를 돕기 위해 실제 HTTP 응답 헤더 하나를 예로 들어 설명하겠습니다.
웹사이트에 SSL 또는 TLS 인증서를 설치했다면, 사이트는 HTTPS(전송 중 데이터를 암호화하는 보안 연결)를 통해서만 접근 가능해야 합니다. 하지만 해커는 여러 방법으로 HTTP를 통해 사이트에 접근하려 시도할 수 있으며, 인터넷에는 누구나 사용할 수 있는 공개 스크립트가 널려 있습니다.
SSL 인증서를 한층 강화하고 사이트가 절대 HTTP로 접속되지 않도록 하려면 'strict transport security'라는 응답 헤더를 추가하면 됩니다. 이렇게 하면 사파리, 크롬, 파이어폭스 등 모든 최신 브라우저가 HTTPS 통신만 허용하게 되어, 콘텐츠 스니핑(content sniffing)과 패킷 스니핑(packet sniffing)의 가능성을 차단합니다.
공격자가 HTTP로 사이트에 접속을 시도하면, 브라우저는 단순히 페이지를 로드하지 않습니다.
워드프레스 사이트에 추가할 수 있는 HTTP 보안 헤더는 여러 종류가 있지만, 오늘은 교차 사이트 스크립팅을 완화·차단하는 X-XSS Protection에 집중하겠습니다.
HTTP 보안 헤더로 X-XSS Protection 설정하는 방법
HTTP 보안 헤더를 설정하려면 .htaccess 파일에 접근해 코드 몇 줄을 추가해야 합니다. 워드프레스 파일을 수정하는 작업은 언제나 위험을 수반하며, 사소한 실수 하나로 사이트 전체가 깨질 수 있습니다.
따라서 진행하기 전에 반드시 워드프레스 사이트의 전체 백업을 먼저 생성하기를 강력히 권장합니다. BlogVault 플러그인을 사용하면 몇 분 안에 사이트 전체를 백업할 수 있습니다. 과정에서 문제가 생기더라도 빠르게 원래 상태로 복구할 수 있습니다.
1단계: 사이트를 스캔해 헤더 존재 여부 확인하기
먼저 웹사이트에 이미 해당 헤더가 활성화되어 있는지 확인하는 것이 좋습니다. 관리형 워드프레스 호스팅 업체에 문의하거나 securityheaders.com 같은 사이트를 이용해 확인할 수 있습니다.
사이트 URL을 입력하고 스캔을 실행하면 아래와 같은 리포트를 볼 수 있습니다.

이 결과를 통해 X-XSS protection 헤더가 설정되어 있지 않음을 확인할 수 있습니다.
참고: 대부분의 브라우저는 기본적으로 X-XSS protection이 활성화되어 있습니다. 하지만 워드프레스에 이 보안 헤더를 명시적으로 추가하면, 브라우저에게 XSS 해킹 시도를 차단하라고 지시하는 것이므로 훨씬 확실한 보호가 가능합니다.
2단계: 워드프레스 .htaccess 파일에 접근하기
워드프레스 호스팅 계정에 로그인한 후, cPanel > 파일 관리자(File Manager)로 이동합니다.

폴더 목록에서 우측 패널의 public_html 폴더를 찾습니다. 이 안에 .htaccess 파일이 있습니다.

팁: .htaccess 파일이 보이지 않는다면 설정(Settings)에서 '숨김 파일 표시(Show hidden files)'를 선택하세요.
3단계: 워드프레스 보안 헤더 삽입하기
파일을 수정하려면 파일을 마우스 오른쪽 버튼으로 클릭한 뒤 '편집(Edit)' 옵션을 선택합니다.

.htaccess 파일의 맨 끝에 다음 코드 한 줄을 추가합니다:
Header set X-XSS-Protection "1; mode=block"
그리고 파일을 저장합니다.
4단계: HTTP 응답 헤더 작동 여부 확인하기
마지막으로 securityheaders.com에서 사이트를 다시 스캔하여 헤더가 정상적으로 적용되었는지 확인합니다.
이것으로 끝입니다. 보안 헤더를 구현하여 XSS 공격을 차단하는 또 하나의 보안 계층을 웹사이트에 성공적으로 추가했습니다.
결론: 모든 공격으로부터의 완벽한 보호
이 워드프레스 보안 헤더를 적용했다면 이제 사이트는 XSS 공격으로부터 안전해졌을 것입니다. 하지만 XSS만이 유일한 위협은 아닙니다. 웹사이트는 해킹과 멀웨어 감염 등 끊임없는 위험에 노출된 디지털 세계에 존재합니다.
해킹 시도를 차단하고 사이트를 안전하게 유지하려면 충분한 보안 조치를 취해야 합니다. MalCare를 설치하면 워드프레스 사이트에 대한 전방위적인 보호를 받을 수 있습니다. 정기적인 스캔과 모니터링은 물론, 악성 IP 주소를 차단하는 방화벽까지 제공됩니다. MalCare가 있다면 사이트 보안을 안심하고 맡길 수 있습니다. 워드프레스 사이트 보안 강화 방법에 대한 가이드도 함께 참고해 보세요.
MalCare로 워드프레스 사이트를 안전하게 보호하세요!