클릭재킹은 공격자 페이지 위에 내 사이트를 투명하게 겹쳐 놓고, 사용자가 엉뚱한 버튼을 누르도록 속이는 공격이다.
사용자는 자기가 보는 화면을 클릭한다고 믿지만, 실제로는 그 아래 감춰진 내 사이트의 "결제"·"삭제"·"권한 부여" 버튼을 누르게 된다.
어떻게 뚫리나
공격자는 자신이 만든 미끼 페이지에 우리 사이트를 <iframe>으로 불러온 뒤 opacity:0으로 투명하게 만들어, 그럴듯한 "경품 받기" 버튼 위에 정확히 겹쳐 놓는다. 로그인된 사용자가 미끼 버튼을 누르는 순간 클릭은 투명한 우리 사이트 버튼으로 전달된다. 계정 설정 변경, 자금 이체, 팔로우, 권한 위임처럼 클릭 한 번으로 완료되는 상태 변경이 표적이 된다.
왜 iframe이 문제인가
브라우저가 우리 페이지를 남의 사이트 iframe 안에 넣도록 허용하면 이 겹치기가 성립한다. 따라서 서버가 응답 헤더로 "누가 나를 iframe에 넣을 수 있는가"를 명시적으로 선언해야 막힌다. 오래된 X-Frame-Options와, 더 세밀한 최신 방식인 CSP frame-ancestors가 그 역할을 한다.
왜 남 일이 아닌가
클릭재킹은 "헤더 한 줄이 없어서" 뚫리는 대표적인 사례다. 코드 로직에는 아무 문제가 없어도 응답 헤더 설정을 빠뜨리면 그대로 노출된다. 반대로 말하면 자동 점검으로도 쉽게 잡히는 유형이다. 특히 로그인 상태에서 민감한 동작을 처리하는 관리자 페이지·대시보드·결제 화면이 방치되기 쉽다.
자가 점검 3가지
- iframe에 넣어보라 — 간단한 HTML 파일에
<iframe src="https://내사이트">를 넣고 열어본다. 화면에 우리 사이트가 그대로 뜨면 취약, 빈 칸으로 차단되면 방어된 것이다. - 응답 헤더를 확인하라 —
X-Frame-Options: DENY(또는 SAMEORIGIN)나 CSPframe-ancestors 'self'가 응답에 있는지 본다. 둘 중 CSPframe-ancestors가 다중 출처를 세밀하게 다룰 수 있어 현대적 권장안이다. 보안 헤더 8종 가이드와 CSP 설정 가이드도 함께 참고하면 좋다. - 민감한 동작엔 확인 단계 — 중요한 상태 변경에는 재인증이나 확인 창을 둬서 단 한 번의 클릭으로 끝나지 않게 한다.
헤더 누락, 무료로 바로 확인하세요
X-Frame-Options와 frame-ancestors 같은 보안 헤더 누락은 URL 하나로 자동 점검할 수 있는 대표 항목입니다. 보안 전문 기업 SENTRIX가 실제 모의해킹에서 쓰는 점검 기준으로 만든 CodeScan 무료 진단에서 30초 만에 내 사이트의 헤더 상태를 확인해 보세요. 쿠키 보안 속성도 함께 점검하면 좋습니다.