설명
새 페이지가 window.opener에 접근할 수 있으면 원래 탭을 피싱 페이지로 이동시킬 수 있습니다. 현재 HTML 표준과 이를 지원하는 브라우저는 target="_blank"에 기본적으로 noopener 동작을 적용합니다. 따라서 보호 속성 생략만으로 취약하다고 단정할 수는 없지만, 오래된 환경과 명시적인 opener 허용 여부를 확인해야 합니다.
잠재적 영향
- 피싱 페이지로 원래 탭을 바꿔 사용자의 로그인 정보나 민감 정보를 탈취할 수 있습니다.
- 사용자는 신뢰하던 사이트 탭에서 화면이 바뀌었기 때문에 공격 페이지를 정상 페이지로 오인할 수 있습니다.
해결 방법
- 외부 링크를 새 탭으로 열 때
rel="noopener"를 명시하세요.rel="noreferrer"는 같은 opener 보호와 함께 Referer 전송도 막으므로 필요한 경우 추가하세요. - 가능한 경우 프레임워크나 컴포넌트 레벨에서 외부 링크 정책을 공통으로 적용하세요.
예시
변경 전
html
<a href="https://example.org" target="_blank">외부 링크</a>
변경 후
html
<a href="https://example.org" target="_blank" rel="noopener noreferrer">외부 링크</a>
설명:
- 변경 전: 명시적인 보호 속성이 없습니다. 현재 브라우저의 기본 보호가 적용되지 않아
window.opener가 유지되는 환경에서는 원래 탭을 이동시킬 수 있습니다. - 변경 후:
target="_blank"링크에rel="noopener noreferrer"를 명시해 opener 연결과 Referer 전송을 차단합니다.