정적 웹사이트 취약점에 대한 7가지 HTML 보안 모범 사례
정적 웹사이트는 미리 완성된 콘텐츠를 저장하기 때문에 데이터베이스 연결, 복잡한 스크립트 실행, 또는 사용자가 페이지를 요청할 때마다 실시간으로 작동하는 엔진에 의존할 필요가 없습니다.
이러한 특성은 웹사이트 로딩 속도 향상과 보안 강화라는 분명한 이점을 제공합니다. 정적 페이지는 서버 부하를 줄여주고, 보안 취약점이 적어집니다. 그 결과, 검색 엔진은 동적 페이지보다 정적 페이지의 순위를 더 높게 평가하는 경향이 있습니다.
급변하는 디지털 환경에서 SEO 전문가들은 경쟁 우위를 확보하기 위해 정적 콘텐츠에 주목하고 있습니다. 정적 콘텐츠 배포는 마케팅 전략가들 사이에서 화제가 되고 있으며, IT 담당자들은 보안 취약점을 줄일 수 있다는 점에 주목하고 있습니다.
하지만 주의해야 합니다. 정적 콘텐츠가 100% 해킹을 막을 수 있는 것은 아닙니다. 웹사이트에 정적 콘텐츠를 배포할 계획이라면 보안을 유지하기 위해 따라야 할 몇 가지 중요한 지침이 있습니다.
보안 헤더는 웹 서버가 제공하는 콘텐츠에 추가하는 HTTP 응답 헤더의 일부입니다. 여기에는 메타데이터, 오류 코드, 캐시 규칙 등이 포함되어 있으며, 브라우저가 콘텐츠를 어떻게 처리해야 하는지에 대한 지침을 제공합니다. 모든 브라우저가 모든 보안 헤더를 지원하는 것은 아니지만, 해커의 악의적인 공격을 막기 위해 일반적으로 사용되는 몇 가지 기본 보안 헤더가 있습니다.
X-Frame-Options: SAMEORIGIN
X-Frame-Options 헤더는 웹사이트가 iframe을 통해 노출될 수 있는 위험을 줄이거나 차단하는 데 사용됩니다. iframe은 해커가 사용자의 클릭을 가로채 악성 URL로 유도하는 데 악용될 수 있습니다. iframe의 오용을 방지하는 다양한 방법이 있습니다.
OWASP(Open Web Application Security Project)에서는 동일한 출처에서만 iframe을 사용할 수 있도록 하는 SAMEORIGIN 매개변수를 사용하여 이 헤더를 설정하는 것을 권장합니다. 다른 옵션으로는 iframe을 완전히 비활성화하는 DENY와 특정 URL에서만 iframe에 페이지를 넣을 수 있도록 허용하는 ALLOW-FROM이 있습니다.
Apache 및 Nginx에 대한 설정 안내를 참조하십시오.
X-XSS-Protection: 1; mode=block
X-XSS-Protection 헤더는 사이트 간 스크립팅(XSS) 공격으로부터 웹사이트를 보호하기 위해 설계되었습니다. 이 헤더는 두 가지 방법으로 구현할 수 있습니다.
- X-XSS-Protection: 1
- X-XSS-Protection: 1; mode=block
첫 번째 방법은 요청에서 서버로 전달되는 스크립트를 필터링하지만, 문제가 있더라도 페이지를 계속 표시합니다. 두 번째 방법은 XSS 공격이 감지되면 해당 페이지를 완전히 차단하여 더 강력한 보안을 제공합니다. OWASP에서는 두 번째 방법을 모범 사례로 권장합니다.
X-Content-Type-Options: nosniff
이 헤더는 브라우저가 콘텐츠를 검사하고, 헤더에 명시된 내용과 다른 방식으로 콘텐츠를 처리하는 MIME "스니핑" 기능을 비활성화합니다. 이 헤더가 설정되면 브라우저는 콘텐츠 유형을 임의로 추측하는 대신, 헤더에 명시된 콘텐츠 유형을 따라야 합니다.
이 헤더를 적용한 후에는 정적 웹사이트의 각 페이지에 콘텐츠 유형이 올바르게 설정되었는지 확인해야 합니다.
Content-Type: text/html; charset=utf-8
이 설정은 HTTP 프로토콜 버전 1.0부터 HTML 페이지의 요청 및 응답 헤더에 포함되었습니다. 이를 통해 모든 태그가 브라우저에서 올바르게 해석되고 웹 페이지에 정상적으로 표시되도록 합니다.
TLS 인증서 사용

SSL/TLS 인증서는 웹 서버가 보안 HTTPS 프로토콜을 통해 웹 브라우저로 전송하는 데이터를 암호화하므로 모든 웹사이트에 필수적입니다. 이 과정을 통해 데이터가 전송 중에 가로채어 읽히는 것을 방지하여 사용자의 개인 정보를 보호하고 웹사이트의 보안을 유지할 수 있습니다. 정적 웹사이트는 방문자의 개인 정보를 직접 저장하지 않지만, 방문자가 요청하는 정보가 악의적인 공격자에게 노출되지 않도록 하는 것이 중요합니다.
웹사이트에서 암호화를 사용하는 것은 대부분의 웹 브라우저에서 안전한 사이트로 표시되도록 하는 데 필수적이며, 유럽 연합의 GDPR(일반 데이터 보호 규정)을 준수해야 하는 웹사이트에도 필요합니다. 법적으로 SSL 인증서 사용을 명시하지는 않았지만, 규정에서 요구하는 개인 정보 보호 요건을 충족하는 가장 쉬운 방법 중 하나입니다.
보안 측면에서 SSL 인증서를 사용하면 웹사이트 소유자를 확인할 수 있으며, 해커가 웹사이트의 가짜 버전을 만드는 것을 방지할 수 있습니다. SSL 인증서를 통해 방문자는 웹사이트가 신뢰할 수 있는 출처에서 제공되었는지 확인할 수 있으며, 웹사이트에서 자신의 활동이 감시받지 않는다는 확신을 가질 수 있습니다.
다행히도 인증서 비용은 그리 높지 않습니다. ZeroSSL에서 무료로 얻거나, SSL 스토어와 같은 곳에서 프리미엄 버전을 구매할 수도 있습니다.
DDoS 보호 적용

DDoS(분산 서비스 거부) 공격이 점차 증가하고 있습니다. 이러한 공격은 분산된 여러 장치에서 서버를 과도하게 요청하여 서버가 작동을 멈추게 합니다. 웹사이트가 정적 콘텐츠를 사용하는지 여부는 중요하지 않습니다. 적절한 조치를 취하지 않으면 웹 서버는 DDoS 공격의 피해자가 될 수 있습니다.
웹사이트에 DDoS 보호를 설정하는 가장 간단한 방법은 보안 서비스 제공업체에 모든 사이버 위협을 처리하도록 맡기는 것입니다. 이러한 서비스는 침입 감지, 바이러스 백신, 취약점 스캔 등 다양한 보안 기능을 제공하므로 위협에 대한 걱정을 줄일 수 있습니다.
이러한 종합적인 솔루션은 비용이 많이 들 수 있지만, DPaaS(DDoS Protection as a Service)와 같이 더 저렴한 가격으로 특정 기능에 집중한 솔루션도 있습니다. 이러한 서비스를 제공하는지 호스팅 제공업체에 문의해야 합니다.
더 저렴한 옵션으로는 Akamai, Sucuri, 또는 Cloudflare와 같은 클라우드 기반 DDoS 보호 서비스가 있습니다. 이러한 서비스는 DDoS 공격을 빠르게 탐지하고 분석하여 악성 트래픽을 웹사이트에서 다른 곳으로 리디렉션합니다.
DDoS 방어 솔루션을 고려할 때 네트워크 용량을 고려해야 합니다. 이 용량은 보호 기능이 얼마나 강한 공격을 견딜 수 있는지를 나타냅니다.
취약한 JavaScript 라이브러리 사용 방지

웹사이트가 정적 콘텐츠를 사용하더라도, 보안 위협을 초래할 수 있는 JavaScript 라이브러리를 사용할 수 있습니다. 일반적으로 이러한 라이브러리의 약 20%가 웹사이트를 취약하게 만드는 원인으로 알려져 있습니다. 다행히도 취약점 DB와 같은 서비스를 사용하여 특정 라이브러리가 안전한지 확인할 수 있습니다. 데이터베이스에서 알려진 많은 취약점에 대한 자세한 정보와 지침을 찾을 수 있습니다.
특정 라이브러리의 취약점을 확인하는 것 외에도, 잠재적인 위협에 대한 수정 사항을 제공하는 다음 JavaScript 라이브러리 관련 지침을 따르는 것이 좋습니다.
- 외부 라이브러리 서버를 사용하지 마십시오. 대신 웹사이트를 호스팅하는 서버에 라이브러리를 저장하십시오. 외부 라이브러리를 사용해야 하는 경우, 블랙리스트에 있는 서버의 라이브러리 사용을 피하고 외부 서버의 보안을 정기적으로 확인하십시오.
- JavaScript 라이브러리에 버전 관리를 적용하고, 각 라이브러리의 최신 버전을 사용하고 있는지 확인하십시오. 버전 관리가 어려운 경우, 알려진 취약점이 없는 버전이라도 사용해야 합니다. Retire.js를 사용하여 취약한 버전의 라이브러리를 감지할 수 있습니다.
- 웹사이트가 모르는 외부 라이브러리를 사용하고 있는지 정기적으로 검사하십시오. 이를 통해 해커가 원치 않는 라이브러리 제공자에 대한 링크를 삽입했는지 확인할 수 있습니다. 인젝션 공격은 정적 웹사이트에서 발생할 가능성이 낮지만, 정기적으로 확인하는 것이 좋습니다.
백업 전략 실행

정적 웹사이트는 변경될 때마다 항상 콘텐츠를 안전하게 백업해야 합니다. 백업 파일은 안전하게 저장되어야 하며, 문제 발생 시 웹사이트를 복원해야 할 때 쉽게 접근할 수 있어야 합니다. 정적 웹사이트를 백업하는 방법은 여러 가지가 있으며, 일반적으로 수동 및 자동 방법으로 나눌 수 있습니다.
웹사이트 콘텐츠가 자주 변경되지 않는 경우, 수동 백업 전략이 적합할 수 있습니다. 콘텐츠를 변경할 때마다 새로운 백업을 생성하는 것을 기억해야 합니다. 호스팅 계정을 관리할 수 있는 제어판이 있다면, 제어판에서 백업 옵션을 찾을 수 있을 것입니다. 그렇지 않은 경우, FTP 클라이언트를 사용하여 모든 웹사이트 콘텐츠를 로컬 장치에 다운로드하여 안전하게 보관하고 필요에 따라 복원할 수 있습니다.
물론, 웹사이트 관리 작업을 최소화하고 싶다면 자동 백업 옵션을 사용하는 것이 좋습니다. 하지만 자동 백업은 일반적으로 호스팅 제공업체에서 제공하는 프리미엄 서비스이므로, 웹사이트 보안 유지 비용이 추가될 수 있습니다.
백업을 위해 클라우드 객체 스토리지를 사용하는 것도 고려해 볼 수 있습니다.
신뢰할 수 있는 호스팅 제공업체 선택

웹사이트가 원활하고 빠르게 작동하면서 해킹으로부터 안전하게 유지되려면, 안정적인 웹 호스팅 서비스가 필수적입니다. 대부분의 웹 호스팅 리뷰에서는 속도, 가동 시간, 고객 지원 등의 수치를 비교하지만, 웹사이트 보안을 고려할 때 특별히 주의해야 할 몇 가지 측면이 있습니다. 서비스에 가입하기 전에 공급업체에 다음과 같은 내용을 문의해야 합니다.
- 소프트웨어 보안: 소프트웨어 업데이트가 어떻게 처리되는지 확인해야 합니다. 예를 들어 모든 소프트웨어가 자동으로 업데이트되는지, 아니면 각 업데이트가 배포되기 전에 테스트 단계를 거치는지 알아봐야 합니다.
- DDoS 보호: 호스팅 서비스에 DDoS 보호 기능이 포함된 경우, 웹사이트 요구 사항을 충족하는지 확인하기 위해 해당 기능의 작동 방식에 대한 세부 정보를 요청해야 합니다.
- SSL 가용성 및 지원: 대부분의 경우 인증서는 호스팅 제공업체에서 관리하므로, 제공하는 인증서의 종류와 인증서 갱신 정책을 확인해야 합니다.
- 백업 및 복원: 많은 호스팅 제공업체에서 자동 백업 서비스를 제공합니다. 이러한 서비스를 이용하면 백업 생성, 저장 및 유지 관리 과정을 크게 신경 쓰지 않아도 됩니다. 그러나 이러한 서비스의 비용을 고려하여 콘텐츠를 직접 백업하는 것과 비교해 봐야 합니다.
- 악성 코드 보호: 신뢰할 수 있는 호스팅 제공업체는 정기적인 악성 코드 검사를 수행하고 파일 무결성을 모니터링하여 서버를 악성 코드로부터 보호해야 합니다. 공유 호스팅의 경우, 호스팅 제공업체는 계정 격리를 사용하여 인접한 웹사이트에서 악성 코드가 전파되는 것을 방지해야 합니다.
- 방화벽 보호: 호스팅 제공업체는 적대적인 트래픽을 차단하는 방화벽을 설정하여 호스팅하는 웹사이트의 보안을 강화할 수 있습니다.
안정적인 정적 사이트 호스팅 플랫폼을 확인하십시오.
강력한 암호 정책 시행

정적 사이트에는 데이터베이스나 관리되는 콘텐츠 시스템이 없으므로 관리해야 할 사용자 이름과 암호가 적습니다. 그러나 정적 콘텐츠를 업데이트하는 데 사용되는 호스팅 또는 FTP 계정에 강력한 암호 정책을 적용해야 합니다.
다음은 암호에 대한 모범 사례입니다.
- 정기적으로 암호 변경
- 최소 암호 길이 설정
- 특수 문자 및 숫자와 함께 대문자와 소문자의 조합 사용
- 이메일이나 문자 메시지로 암호를 전송하지 않기
또한, 관리 계정의 기본 암호는 처음부터 변경해야 합니다. 이것은 해커가 쉽게 악용할 수 있는 일반적인 실수입니다. 암호를 잃어버릴까 봐 걱정하지 마십시오. 암호 관리자를 사용하여 안전하게 관리할 수 있습니다.
정적 사이트에 주목하세요
몇 년 전만 해도 동적 콘텐츠가 주류였습니다. 모든 것을 쉽게 변경하고 업데이트할 수 있었으며, 몇 초 만에 전체 웹사이트를 재설계할 수 있었습니다. 그러나 속도가 가장 중요해지면서 정적 콘텐츠가 다시 주목받게 되었습니다.
따라서 모든 웹사이트 보안 관행을 다시 평가해야 합니다. 고려해야 할 측면은 적지만, 보안에 소홀해서는 안 됩니다. 이 모범 사례 목록은 정적 웹사이트를 안전하게 유지하기 위한 자체 점검 목록을 만드는 데 도움이 될 것입니다.