이메일 난독화: 2026년에 효과적인 방법은?
2 hours ago
1
- 이메일 주소를 스팸 수집기로부터 보호하기 위해 다양한 HTML·CSS·JavaScript 난독화 기법을 실험해 차단율을 비교함
- 426개 텍스트·399개 링크 표본을 대상으로 테스트한 결과, 대부분의 JS 기반·CSS·SVG 기법이 100% 차단율을 기록함
-
HTML 엔티티·URL 인코딩 같은 오래된 방식도 여전히 높은 차단 효과를 보였음
- 반면 이미지 표시·기호 치환·텍스트 방향 반전 등은 접근성과 사용성을 심각하게 저해함
- 2026년 기준으로는 JS 변환·AES 암호화·사용자 상호작용 방식이 가장 안전하고 실용적인 이메일 보호 수단으로 평가됨
이메일 주소 난독화 기법 비교 (2026년 기준)
- 이메일 주소를 스팸 수집기(하베스터) 로부터 숨기기 위한 다양한 난독화 기법과 각 기법의 실제 효과를 통계로 제시
- 각각의 이메일 주소를 다른 방식으로 보호한 뒤, 426개(텍스트) 및 399개(링크) 표본을 대상으로 하베스터 접근 여부를 측정해 차단율 산출
- 대부분의 JavaScript 기반 기법과 일부 CSS·SVG 기법이 100% 차단율을 기록
-
HTML 엔티티·URL 인코딩 같은 오래된 방식도 여전히 높은 차단율 유지
- 일부 기법은 접근성이나 사용성을 심각하게 저해해 실사용에는 부적합
1. 일반 텍스트 이메일 보호 기법
- 이메일 주소를 페이지에 직접 표시하되, 다양한 HTML·CSS·JS 기법으로 하베스터가 읽지 못하게 하는 방식
- 여러 기법을 조합해 세그먼트별로 보호하면 효과 극대화 가능
-
보호 없음 (No protection)
- 차단율 0% (426명 중 0명 차단)
- 이메일 주소가 그대로 노출되어 모든 하베스터에게 수집됨
-
HTML 엔티티 (HTML Entities)
- 차단율 95%
- 서버 측 라이브러리가 자동으로 디코딩하지만, 실제로는 대부분의 하베스터 차단
-
HTML 주석 (HTML Comments)
- 차단율 99%
- HTML 태그 해석이 약한 기본형 하베스터만 차단 가능
- 단순하지만 여전히 높은 차단 효과 유지
-
HTML SVG
- 차단율 100%
- 이메일 주소를 SVG 객체 내부 텍스트로 숨김
- 시각장애인용 스크린리더 접근 가능
-
<object> 요소 사용 필수, <img>나 인라인 SVG는 소스 노출 위험
- 폰트 의존성이 있어 웹 폰트 지정 필요
-
CSS display:none
- 차단율 100%
- 스타일 규칙을 적용하지 못하는 하베스터의 한계를 이용
-
접근성 유지 가능하며, 시각적 숨김 대신 display:none 사용 권장
-
JS 문자열 연결 (Concatenation)
- 차단율 100%
- 외부 의존성 없이 간단히 구현 가능
- 이메일 전체가 HTML 소스에 존재하므로 보안상 취약
-
JS Rot18
- 차단율 100%
- ROT13과 유사한 문자 회전 암호 사용
- 단순한 하베스터는 해독 불가하지만, JS를 무시하는 수집기에는 취약
-
JS 변환 (Conversion)
- 차단율 100%
- HTML에는 의미 없는 문자열만 포함하고, JS 함수가 이를 실제 이메일로 변환
- 대부분의 하베스터는 DOM·JS 실행 불가로 복원 불가능
-
간단하면서도 매우 효과적인 기법
-
JS AES 암호화
- 차단율 100%
-
AES-256 암호화를 이용해 이메일 보호
- 브라우저의 SubtleCrypto API 사용, HTTPS 환경에서만 작동
- JS 파일 없이는 복호화 불가능
-
JS 사용자 상호작용 (User interaction)
- 차단율 100%
- 사용자가 페이지와 상호작용할 때만 이메일 표시
- 하베스터는 DOM 실행 + 사용자 이벤트 시뮬레이션이 필요해 사실상 불가능
-
HTML 기호 치환 (Symbol substitution)
- 차단율 96%
- “AT”, “DOT” 등으로 치환
- 사용자가 직접 수정해야 하므로 사용성 저하
-
HTML 지시문 (Instructions)
- 차단율 100%
- 이메일에 “remove the .fluff” 같은 수동 지시 포함
- 사람이나 AI만 해석 가능하지만 사용자 불편 큼
-
HTML 이미지
- 차단율 100%
- 이메일 주소를 이미지로 표시
- 시각장애인 접근 불가, 복사 불가 등 사용성 붕괴
-
CSS content
- 차단율 100%
-
::after 가상요소로 이메일 표시
- 시각적으로는 보이지만 복사 불가, HTML만으로도 복원 가능
-
무용한 기법으로 평가
-
CSS 텍스트 방향 (Text direction)
- 차단율 100%
-
direction: rtl로 문자열 반전
- 하베스터가 CSS를 무시하면 쉽게 해독 가능
-
텍스트가 거꾸로 복사되어 사용성 저하
2. 클릭 가능한 링크 보호 기법
-
mailto: 링크의 href 속성을 보호하는 방식
- 링크 텍스트에 이메일이 포함될 경우, 별도의 텍스트 난독화 기법 병행 필요
-
보호 없음
- 차단율 0% (399명 중 0명 차단)
- 이메일 주소 완전 노출
-
HTML 엔티티
- 차단율 100%
- 서버 측 자동 디코딩에도 불구하고 대부분의 하베스터 차단
-
URL 인코딩
- 차단율 95%
- 디코딩이 쉬우나 실제로는 대부분의 하베스터 차단
-
HTTP 리다이렉트
- 차단율 100%
-
mailto: 링크를 일반 링크처럼 보이게 숨김
-
.htaccess에서 302 또는 301 리다이렉트 설정
-
nofollow, noindex로 검색엔진 인덱싱 방지
-
메일 필드 자동 채움 시 QSA 플래그 필요
-
HTML SVG
- 차단율 100%
- 이메일 링크를 SVG 내부에 숨김
- 접근성 유지, <object> 사용 필수
- 폰트 지정 필요
-
JS 문자열 연결
- 차단율 100%
- 외부 의존성 없이 구현 가능
- 이메일이 HTML에 직접 포함되어 안전하지 않음
-
JS Rot18
- 차단율 99%
- ROT13과 유사한 문자 회전
- 단순한 하베스터는 해독 불가
-
JS 변환 (Conversion)
- 차단율 100%
- HTML에는 가짜 링크만 존재하고 JS가 이를 실제 mailto:로 변환
- 하베스터는 HTML만 접근 가능하므로 복원 불가
-
간단하면서도 매우 효과적인 기법
-
JS AES 암호화
- 차단율 100%
- AES-256으로 암호화된 이메일 링크
- 브라우저의 SubtleCrypto API 사용, HTTPS 필요
-
JS 사용자 상호작용
- 차단율 100%
- 사용자가 페이지와 상호작용해야만 링크 활성화
- 하베스터가 이를 재현하기 어려움
3. 비판 및 반론
- “스패머는 웹을 긁지 않고 유출 데이터베이스를 구매한다”는 주장에 대해
- 이 페이지의 이메일 주소들은 이 페이지에만 공개되었음에도 수천 건의 스팸을 받음
- “보호 필요 없다”는 주장에 대해
- 인기 콘텐츠는 집중적으로 수집되므로 바이럴 가능성을 고려하면 보호 필요
- “스팸 필터만 있으면 된다”는 주장에 대해
- 이 기법들은 오탐 없이 무료로 구현 가능, 필터와 병행 사용이 바람직
- “기법이 알려지면 무용하다”는 주장에 대해
- 수십 년간 동일한 기법이 여전히 유효함이 통계로 확인됨
4. 실험 방법론
- 각 난독화 기법으로 보호된 이메일 주소를 실제로 공개해 하베스터용 허니팟으로 운영
- 스팸이 도착하면 해당 주소의 보호 기법이 뚫린 것으로 간주
- 스패머별로 메시지를 그룹화해 발신자 수 기준 통계 산출
- 스팸 필터링이 통계를 왜곡하지 않도록 직접 메일 서버와 클라이언트 구축
- 텍스트 기반과 링크 기반 하베스터가 다르므로 별도 통계로 분리
- 표본 수는 아직 작지만, 링크가 늘어날수록 통계 신뢰도 향상 예상
결론
-
JS 기반 변환·암호화·사용자 상호작용 기법이 가장 높은 보안성과 접근성 제공
-
CSS display:none과 SVG 객체 기법도 접근성과 차단율 측면에서 우수
-
기호 치환, 이미지, 텍스트 방향 반전 등은 사용성을 심각하게 해치므로 비추천
- 이메일 공개가 필요한 경우, 간단한 JS 변환 또는 AES 암호화 방식이 2026년 기준 가장 효과적인 선택임
-
Homepage
-
개발자
- 이메일 난독화: 2026년에 효과적인 방법은?