window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster가 이미 존재합니다') } else { w.LeadBooster = { q: [], on: 함수 (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 함수 (n) { this.q.push({ t: 't', n: n }) }, } } })() thecodest, Author at The Codest - Page 9 of 18

최근 저희는 XSS 취약점과 관련된 웹 애플리케이션 보안. 이번에는 또 다른 위험에 대해 알려드리고자 합니다.

이 백서에서 논의된 취약점은 오랫동안 우리와 함께 해왔으며, 그 단순성 때문에 종종 과소평가되거나 심지어 알려지지 않은 경우도 있습니다. 웹 애플리케이션 개발자.

거의 모든 웹 애플리케이션에는 클릭하면 원래 페이지가 있는 탭이 닫히지 않도록 새 탭에서 열리는 링크가 포함되어 있습니다. 이는 제작자가 사용자가 애플리케이션에서 최대한 많은 시간을 보내기를 원하기 때문에 선호되는 동작입니다.

이 취약점을 악용하는 공격은 소위 "리버스 탭네이빙"입니다. 대상 페이지에서 링크된 페이지가 피싱 사이트 등으로 해당 페이지를 대체할 수 있는 공격입니다.

공격 시나리오

  1. 피해자가 target="_blank"를 통해 링크를 여는 것으로 알려진 Facebook을 사용한다고 가정해 보겠습니다,
  2. 가짜 바이럴 페이지를 만듭니다,
  3. Facebook 로그인 페이지처럼 보이는 피싱 웹사이트를 만듭니다,
  4. 아래 내용을 입력하세요. 코드 바이러스 페이지에서 발견된 XSS 취약점 등을 통해
    window.opener.location = 'https://phishing-website/facebook.com';
  5. 피해자가 Facebook에서 바이러스 페이지로 연결되는 링크를 클릭합니다,
  6. 바이럴 페이지는 페이스북 탭을 피싱 웹사이트로 리디렉션하여 사용자에게 다시 로그인할 것을 요청합니다.

따라서 웹 API에서 창 개체를 통해 감염된 대상 페이지의 상위 탭을 변경할 수 있습니다. 일반적으로 공격은 발견된 여러 취약점과 피싱 사기를 동시에 사용하는 방식으로 이루어집니다.

문제

링크를 사용하여 브라우저에서 새 탭을 열 때 target="_blank" 속성을 추가하면 새 탭에서 '리퍼러'에 액세스할 수 있습니다. 더 구체적으로 말하면 오프너 속성의 객체를 호출하면 해당 객체를 연 창, 즉 상위 페이지에 대한 참조를 반환합니다.

이는 창 열기() 함수. 이 속성에 액세스하면 상위 페이지를 쉽게 바꿀 수 있습니다. 일부 최신 브라우저에서는 window.opener 함수를 대상 탭에서 null 를 사용하여 이 동작을 방지할 수 있습니다.

코드 예시

<code> <a href="https://github.com" target="_blank">GitHub로 이동 - 감염된 링크</a>
const
 if (링크)
   link[0].onclick = () => { {
     if (window) window.opener.location = 'https://stackoverflow.com'
   }

위에서는 감염된 링크를 볼 수 있는데, 원래는 GitHub 페이지가 있는 새 탭이 열리지만 '부모' 페이지가 Stackoverflow 사이트로 변경됩니다.

라이브 예제

1. HTML 링크

추가 rel="noopener noreferrer"<a> 태그.

그리고 rel 속성은 연결된 리소스와 현재 문서 간의 관계를 정의합니다.

noopener 은 브라우저에 대상을 연 부모에 대한 액세스 권한을 부여하지 않고 대상을 탐색하도록 지시합니다. 대상 탭 창 열기null.

노레퍼러 는 브라우저가 타깃으로 이동할 때 주소나 다른 값을 참조자로 부모에게 보내는 것을 방지합니다. 참조 HTTP 헤더. 이 HTTP 헤더 이름은 의도적으로 "referrer"로 철자가 잘못 표기되어 있습니다.

2. JavaScript 링크

JavaScript의 경우 창 열기 함수에 값을 추가할 수 있습니다. noopener 그리고 노레퍼러 에서 창 기능 매개변수의 창 열기 기능을 사용할 수 있지만 브라우저에 따라 다르게 반응할 수 있으므로 창 열기 as null 사용 후 창 열기() 함수입니다.

자세히 보기:

Rails API 및 CORS. 의식의 전환

NextJS의 데이터 가져오기 전략

온라인 스토어에 마젠토가 필요한 7가지 이유

이 글이 흥미로웠다면 Github에서 Lukasz를 팔로우하세요: https://github.com/twistezo

ko_KRKorean