ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • target="_blank” 사용 이슈 및 해결
    React 2022. 7. 4. 12:33

    target="_blank” 사용 이슈 및 해결

     

    a 태그의 속성인 target="_blank" 를 사용하니

    Using target=_blank without rel=noopener noreferrer is a security risk

    라는 경고문구가 발생했다.

     

    rel=noopener nore referer 없이 target=_blank를 사용하면 보안 위험이 발생한다고 경고하는데,

    대체 무슨 보안 위험이 발생하는걸까 ⁉️


    본론으로 들어가기전, target 속성에 어떤 값을 지정할 수 있는지 먼저 알아보자

     

    target 속성

    target은 'href 속성의 URL에 해당하는 웹 페이지를 어디에서 열 것인가?'를 지정하기 위한 속성이다.

    • _self
      • 연결한 웹 페이지를 현재 탭에서 연다. _self는 기본 설정이므로 target 속성을 생략할 수 있다.
      <a href="연결할 페이지의 URL" target="_self">현재 탭에서 보기</a>
      
    • _blank
      • 연결한 웹 페이지를 새로운 탭에서 연다.
      <a href="연결할 페이지의 URL" target="_blank">새 탭에서 보기</a>
      

    여기서 _blank 가 연결된 페이지를 새로운 탭에서 연다는 점에서 보안 취약점이 생길 수 있다.

    Tabnabbing 피싱 공격에 노출될 수 있기 때문이다.

     

    Tabnabbing 피싱 공격

    HTML 문서 내에서 링크(target이 _blank인 태그)를 클릭했을 때 새롭게 열린 탭(또는 페이지)에서 기존의 문서인 location을 피싱 사이트로 변경해 정보를 탈취하는 공격 기술이다.

    • A 페이지에서 blank 속성의 태그를 클릭해 새 탭의 B 페이지로 이동한다.
    • 다시 A 페이지로 돌아왔을 때는 A 페이지처럼 보이는 피싱사이트로 바뀐다.
    • 로그인이 풀렸다고 착각하고 아이디와 비밀번호를 입력한다.
    • 피싱사이트에서 사용자가 입력한 계정 정보를 탈취한 후 다시 본래의 피싱사이트로 리다이렉트한다.

     

    해결방법

    rel=”noopener noreferrer”

    위와 같은 공격의 취약점을 극복하기 위해 rel=”noopener noreferrer” 속성을 사용하면 된다.

    <a href="연결할 페이지의 URL" target="_blank" rel="noopener noreferrer">새 탭에서 보기</a>
    
    • noopener 지정
      rel=noopener 속성이 부여된 링크를 통해 열린 페이지는 opner의 location 변경과 같은 자바스크립트 요청을 거부한다. 
      즉, 기존 메인페이지를 특정 URL로 이동시키는 window.opener 속성을 사용할 수 없게 하여 A 페이지의 정보를 바꾸지 못하는 것이다.
      추가로, 링크된 페이지와 링크를 건 페이지는 별개의 프로세스로 취급되기 때문에 서로 연결되어 퍼포먼스가 떨어지는 일도 없게 된다.
    • noreferrer 지정
      rel=noreferrer 속성을 지정하면 다른 페이지로 이동할 때 링크를 건 페이지의 주소 등의 정보를 브라우저가
      Referer: HTTP 헤더로 리퍼러(referer 또는 referrer)로서 송신하지 않는다.
      즉, 새로 생긴 페이지에서 특정 URL로 이동시키는 window.opener속성을 사용할 수 없게 한다.
    반응형

    'React' 카테고리의 다른 글

    React - Router (v5)  (3) 2023.01.10
    React - CKEditor 사용해보기  (0) 2023.01.05
    React - 저장된 데이터 불러올 때 개행처리  (0) 2022.05.20
    Ref  (0) 2022.02.25
    React DOM  (0) 2022.02.25

    댓글

Designed by Tistory.