Skip to main content
Back to blog

SEO 가이드 7단계: 보안 — 2026년 구글이 기대하는 기본 기준

·10 분 읽기·by LANGR SEO

SEO 가이드 7단계: 보안

이것은 13단계 SEO 가이드의 7단계입니다. 보안은 단순히 사용자를 보호하는 것이 아니라 검색 순위에 직접적인 영향을 미칩니다. 구글은 2014년부터 HTTPS를 순위 신호로 사용하였으며, 기대치는 더욱 높아졌습니다.


대부분의 사이트 소유자는 보안을 이진수로 생각합니다: "우리는 SSL이 있으니 안전하다." 하지만 실제로 구글은 수십 가지 보안 신호를 평가합니다. 적절한 보안 헤더, 유효한 인증서, 혼합 콘텐츠가 없는 사이트는 기본 SSL 인증서만 가진 사이트보다 순위에서 우위에 있습니다 — 모든 것이 동일할 경우에요.

좋은 소식은 대부분의 보안 수정은 일회성 구성이라는 것입니다. 한 번 설정하면 지속적으로 순위를 보호해줍니다.

SSL 구성

SSL(정확히는 TLS)은 서버와 방문자 간의 연결을 암호화합니다. 구글은 2014년부터 HTTPS를 순위 신호로 명시적으로 확인하였습니다. 2026년에는 HTTPS가 없다는 것이 단순한 순위 문제가 아니라, 크롬이 주소 표시줄에서 HTTP 사이트를 "안전하지 않음"으로 표시하여 사용자 신뢰를 파괴합니다.

적절한 SSL 요구사항:

| 요구사항 | 이유 | 확인 방법 | |--------------|-------------------------------------------------|--------------------------| | 유효한 인증서 | 만료 시 브라우저 경고 발생 = 사용자 이탈 | 만료 날짜 확인 | | 전체 체인 | 불완전한 체인은 일부 장치에서 실패함 | SSL Labs 테스트 | | TLS 1.2 이상 | 이전 버전은 알려진 취약점이 있음 | SSL Labs 테스트 | | SHA-1 없음 | 사용 중단, 브라우저에서 거부됨 | 인증서 세부정보 확인 | | SAN 범위 | www 및 non-www 모두 포함되어야 함 | 인증서 세부정보 확인 | | 자동 갱신 | 만료 재난 방지 | Let's Encrypt / 제공자 구성 |

SSL 점수 기준:

100% = 유효한 인증서 + 전체 체인 + TLS 1.3 + 강력한 암호 + 자동 갱신
  0% = 만료됨 또는 인증서 없음

일반적인 SSL 실수:

  1. 인증서가 미리 알림 없이 만료됨 — 최소 30일 이전에 모니터링 설정(6단계)
  2. 불완전한 인증서 체인 — 서버는 중간 인증서를 보내야 하며, 단지 리프만 보내면 안됨
  3. 혼합 콘텐츠 — HTTPS 페이지가 HTTP 리소스(이미지, 스크립트, 스타일시트)를 로드함
  4. 리다이렉트 루프 — 잘못 구성된 CDN/프록시로 인해 HTTP → HTTPS → HTTP 순환 발생
  5. Non-www 대 www 불일치 — 인증서는 하나만 포함되어 있고 다른 하나는 포함되지 않음

빠른 해결책: 도메인을 SSL Labs(ssllabs.com/ssltest)에서 실행하세요. "A" 등급 이하의 항목은 조치가 필요합니다. 대부분의 호스팅 제공자가 클릭 한 번으로 이를 수정합니다.

보안 헤더

보안 헤더는 사이트 로딩 시 브라우저가 어떻게 행동해야 하는지를 지시하는 HTTP 응답 헤더입니다. 이들은 전체 공격 카테고리를 방지하며, 구글의 크롤러는 이들을 확인합니다.

필수 보안 헤더:

콘텐츠 보안 정책 (CSP)

CSP는 가장 강력한 보안 헤더입니다. 브라우저에게 어떤 리소스(스크립트, 스타일, 이미지, 글꼴)가 페이지에 로드될 수 있는지를 정확히 명시합니다.

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; connect-src 'self' https://api.example.com; frame-ancestors 'none';

CSP가 방지하는 것:

  • 크로스 사이트 스크립팅(XSS) 공격
  • 데이터 주입 공격
  • 클릭재킹 (frame-ancestors를 통해)
  • 승인되지 않은 스크립트 실행(크립토마이너, 광고 주입기)

CSP 배포 전략:

  1. Content-Security-Policy-Report-Only로 시작(차단하지 않고 위반 로그 기록)
  2. 1-2주간 보고서 모니터링
  3. 합법적인 소스 화이트리스트 추가
  4. 강제 모드로 전환
  5. 진행 중의 위반 로그 기록을 위해 report-uri 또는 report-to 추가

X-Frame-Options

다른 도메인의 iframe에 귀하의 사이트가 임베드되는 것을 방지합니다(클릭재킹 보호).

X-Frame-Options: DENY

동일 출처의 프레임을 허용할 필요가 있는 경우:

X-Frame-Options: SAMEORIGIN

X-Content-Type-Options

브라우저가 MIME 타입 스니핑을 하는 것을 방지합니다(파일을 선언된 것과 다르게 해석하는 것).

X-Content-Type-Options: nosniff

이 한 줄은 .jpg 파일에 숨겨진 JavaScript가 있는 공격을 방지합니다.

Referrer-Policy

사용자가 귀하의 사이트에서 링크를 클릭할 때 보내는 referrer 정보의 양을 제어합니다.

Referrer-Policy: strict-origin-when-cross-origin

이는 동일 출처 요청의 전체 URL을 보내지만, 교차 출처 요청의 경우 도메인만 전송합니다. 분석 요구사항과 개인정보 보호 간 균형을 유지합니다.

Permissions-Policy

귀하의 사이트에서 사용할 수 있는 브라우저 기능(카메라, 마이크, 위치 서비스 등)을 제어합니다.

Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()

사용하지 않는 기능을 비활성화하여 제3자 스크립트가 남용하는 것을 방지합니다.

헤더 구현 예시 (Next.js):

// next.config.js
module.exports = {
  async headers() {
    return [{
      source: '/(.*)',
      headers: [
        { key: 'X-Content-Type-Options', value: 'nosniff' },
        { key: 'X-Frame-Options', value: 'SAMEORIGIN' },
        { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
        { key: 'Permissions-Policy', value: 'camera=(), microphone=(), geolocation=()' },
        { key: 'Strict-Transport-Security', value: 'max-age=31536000; includeSubDomains; preload' },
      ]
    }]
  }
}

헤더 구현 (Apache .htaccess):

Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

헤더 구현 (Nginx):

add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

빠른 해결책: 위의 5개 헤더를 서버 구성에 추가하세요. 이 작업은 5분이 소요되며, 어떤 스캔 도구에서든 즉시 보안 태세를 개선합니다.

HSTS 프리로드

HTTP 엄격 전송 보안(HSTS)은 브라우저에 귀하의 도메인에 대해 항상 HTTPS를 사용하도록 지시합니다 — 첫 번째 요청 전에 방금 이루어질 수 있습니다. HSTS가 없으면 귀하의 사이트를 처음 방문할 때 여전히 HTTP를 사용할 수 있으며(가로채기 취약점) HTTPS로 리다이렉트될 수 있습니다.

HSTS 헤더:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

세 가지 지시문:

| 지시문 | 의미 | |-------------------|--------------------------------------| | max-age=31536000 | 1년 동안 기억(초 단위) | | includeSubDomains | 모든 하위 도메인에도 적용 | | preload | 브라우저 프리로드 목록에 포함 요청 |

HSTS 프리로드 목록:

궁극적인 HSTS 보호. 브라우저는 항상 HTTPS를 사용해야 하는 도메인의 내장 목록과 함께 제공됩니다. hstspreload.org에 도메인을 제출하는 것은 다음을 의미합니다:

  • 첫 방문자가 즉시 HTTPS를 받음(HTTP → HTTPS 리다이렉트 없음)
  • 공격자가 연결을 다운그레이드할 수 없음
  • 영구적(한 번 제출하면 제거하기 어려움)

HSTS 프리로드 요구사항:

  1. 유효한 HTTPS 인증서
  2. 모든 HTTP를 HTTPS로 리다이렉트(하위 도메인 포함)
  3. max-age >= 31536000인 HSTS 헤더
  4. HSTS 헤더에 includeSubDomains 포함
  5. HSTS 헤더에 preload 포함
  6. 모든 하위 도메인이 HTTPS를 지원해야 함

경고: 모든 하위 도메인이 HTTPS를 지원하는 경우에만 프리로드에 제출하십시오. includeSubDomains 지시문은 HTTP 전용 하위 도메인이 접근 불가능하게 만듭니다.

빠른 해결책: 모든 하위 도메인에서 이미 HTTPS를 사용하고 있는 경우 전체 HSTS 헤더를 추가하고 hstspreload.org에 제출하세요. 처리에는 몇 주가 걸리지만 보호는 영구적입니다.

취약점 스캐닝

자동화된 취약점 스캐닝은 공격자가 이를 이용하기 전에 스택에서 알려진 보안 문제를 식별합니다.

취약점 스캐닝이 확인하는 것:

  • 구식 소프트웨어: WordPress, 플러그인, 알려진 CVE가 있는 JavaScript 라이브러리
  • 노출된 파일: .env, .git, wp-config.php, 데이터베이스 덤프
  • 정보 유출: 서버 버전 헤더, 디버그 모드, 스택 추적
  • 기본 자격증명: 인증 없이 관리 페이지, 기본 비밀번호
  • 열린 포트/서비스: 인터넷에 노출된 불필요한 서비스
  • 주입 지점: CSRF 보호가 없는 폼, 검증되지 않은 입력

플랫폼별 일반적인 취약점:

| 플랫폼 | 주요 취약점 | 수정 | |---------|------------------|----------------------| | WordPress | 구식 플러그인 | 자동 업데이트 + WAF | | Shopify | 제3자 앱 권한 | 앱 목록 분기별 감사 | | Next.js | 노출된 API 경로 | 인증 미들웨어 + 비율 제한 | | 정적 사이트 | CDN 잘못 구성 | 캐시 규칙 검토 | | 맞춤형 | SQL 주입 | 매개변수화된 쿼리 |

스캐닝 빈도:

  • 일일: 자동화된 표면 스캔(SSL, 헤더, 노출된 파일)
  • 주간: 종속성 취약점 확인(npm audit, WordPress 플러그인 스캐너)
  • 월간: 인증된 테스트와 함께 심층 스캔
  • 매 배포 후: 회귀 확인

빠른 해결책: npm audit(Node.js)를 실행하거나 CMS 플러그인 목록에서 구식 구성 요소를 확인하십시오. 중대한/높은 심각도 문제를 즉시 수정하십시오.

혼합 콘텐츠

혼합 콘텐츠는 HTTPS 페이지가 HTTP를 통해 리소스(이미지, 스크립트, 스타일시트, iframe)를 로드할 때 발생합니다. 이는 부분적으로 암호화를 깨고 브라우저 경고를 트리거합니다.

혼합 콘텐츠 유형:

| 유형 | 심각도 | 예 | 브라우저 동작 | |-----------|--------|-----------|------------------------| | 액티브 | 높음 | HTTP 스크립트, iframe, CSS | 기본적으로 차단됨 | | 패시브 | 중간 | HTTP 이미지, 비디오, 오디오 | 경고와 함께 로드됨 |

액티브 혼합 콘텐츠는 최신 브라우저에서 차단됩니다 — 즉, 스크립트와 스타일이 단순히 로드되지 않습니다. 패시브 혼합 콘텐츠는 로드되지만 보안 경고를 표시합니다.

혼합 콘텐츠 찾기:

  1. Chrome DevTools 열기 → 콘솔
  2. "혼합 콘텐츠" 경고 찾기
  3. 또는 크롤러(Screaming Frog, LANGR)로 스캔하기

일반적인 혼합 콘텐츠 출처:

  • 콘텐츠에 하드코딩된 http:// URL(블로그 게시물, 제품 설명)
  • HTTP 리소스를 로드하는 제3자 위젯
  • 임베드된 콘텐츠(구형 YouTube 임베드, 소셜 미디어 위젯)
  • HTTP URL로 CSS background-image
  • HTTP로 로드된 글꼴

혼합 콘텐츠 수정:

<!-- 나쁨 -->
<img src="http://example.com/image.jpg" />

<!-- 좋음 -->
<img src="https://example.com/image.jpg" />

<!-- 최상(프로토콜 상대적, 페이지 프로토콜에 적응) -->
<img src="//example.com/image.jpg" />

데이터베이스 수정 (WordPress):

UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://yourdomain.com', 'https://yourdomain.com');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'http://yourdomain.com', 'https://yourdomain.com');

빠른 해결책: Chrome에서 홈페이지를 열고 F12를 눌러 콘솔 탭을 확인하여 혼합 콘텐츠 경고를 찾아보세요. 나타나는 모든 것을 수정하십시오 — 이는 구글이 직접적으로 볼 수 있습니다.

제3자 스크립트 위험

로드하는 모든 외부 스크립트는 잠재적인 보안(및 성능) 부담입니다. 제3자 스크립트는 다음과 같은 문제를 초래할 수 있습니다:

  • 손상될 수 있음(공급망 공격)
  • 사용자 동의 없이 추적함(GDPR 위반)
  • 사이트 속도를 저하시킴(렌더링 차단, 네트워크 지연)
  • 기능이 깨짐(버전 업데이트, 중단)
  • 원치 않는 콘텐츠 주입(잘못된 광고 스크립트)

제3자 스크립트 감사:

| 스크립트 | 필요 여부 | 위험 레벨 | 대안 | |---------------------|----------|-----------|----------------------| | 구글 애널리틱스 | 종종 필요 | 낮음 | 서버 측 추적 | | 채팅 위젯 | 아마도 | 중간 | 자체 호스팅 솔루션 | | 소셜 공유 버튼 | 드물게 | 중간 | 정적 공유 링크 | | A/B 테스트 | 때때로 | 높음 | 서버 측 테스트 | | 리타게팅 픽셀 | 비즈니스 결정 | 높음 | 1차 데이터 | | 글꼴 CDN | 편리함 | 낮음 | 자체 호스팅 글꼴 |

필수 제3자 스크립트에 대한 위험 완화:

  1. 하위 리소스 무결성(SRI): 해시 검증은 변조된 스크립트가 로드되는 것을 방지합니다.
<script src="https://cdn.example.com/lib.js"
        integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxAE+sO0..."
        crossorigin="anonymous"></script>
  1. CSP 제한: 알려진 도메인에서만 스크립트를 허용하십시오.
  2. 샌드박스 iframe: 제3자 위젯을 격리합니다.
  3. 정기적인 감사: 모든 외부 리소스에 대한 분기별 검토
  4. 모니터링: 페이지에 새로운 외부 도메인이 나타날 경우 경고 설정

빠른 해결책: 외부 도메인에서 로드되는 모든