iframe이 위험하고 보안 위험으로 간주되는 이유는 무엇입니까? 누군가 악의적으로 사용될 수있는 사례의 예를 설명 할 수 있습니까?
iframe이 위험하고 보안 위험으로 간주되는 이유는 무엇입니까? 누군가 악의적으로 사용될 수있는 사례의 예를 설명 할 수 있습니까?
답변:
다른 도메인의 콘텐츠를 표시하자마자 기본적으로 멀웨어를 제공하지 않도록 해당 도메인을 신뢰하게됩니다.
iframe 자체에는 문제가 없습니다. iframe의 콘텐츠를 제어하면 완벽하게 안전합니다.
<iframe>
요소가 포함 된 문서 )에 적절한 스타일이 있고 iframe에 신뢰할 수없는 콘텐츠가 포함되어 있음을 암시하는 경우 문제가 없습니다. 물론 브라우저의 모듈로 실제 취약성. 요컨대, an <iframe>
은 <a href>
.
<iframe>
동일한 도메인에서 숨겨진 경우 공격자가 숨겨진 iframe 내부의 콘텐츠를 수정할 수있는 경우 보안 위험이 발생할 수 있습니다. 그러면 공격자가 d 콘텐츠 <iframe>
를 참조하는 사이트의 모든 페이지에 숨겨진 XSS 공격을 확장 할 수 <iframe>
있습니다. 자세한 내용은 stackoverflow.com/a/9428051/334451 을 참조하십시오.
IFRAME
경우 요소는 보안 위험이있을 수 있습니다 귀하의 사이트가 내부에 내장되어 IFRAME
적대적인 사이트 . 자세한 내용은 Google "클릭 재킹"을 참조하십시오. 경우 문제가되지 않습니다 당신이 사용 <iframe>
여부. 이 공격에 대한 유일한 실제 보호는 HTTP 헤더를 추가 X-Frame-Options: DENY
하고 브라우저가 작업을 알고 있기를 바라는 것입니다.
또한 사이트의 페이지에 악용 될 수있는 XSS 취약점이있는 경우 IFRAME 요소가 보안 위험이 될 수 있습니다 . 이 경우 공격자는 <iframe>
XSS 취약성이있는 페이지 내에서로드하도록 설득 할 수있는 동일한 도메인 내의 모든 페이지로 XSS 공격을 확장 할 수 있습니다 . 이는 동일한 출처 (동일한 도메인)의 콘텐츠가 상위 콘텐츠 DOM에 액세스 할 수 있기 때문입니다 (실제로 "호스트"문서에서 JavaScript를 실행). 이 공격에 대한 유일한 실제 보호 방법은 HTTP 헤더를 추가 X-Frame-Options: DENY
하거나 항상 사용자가 제출 한 모든 데이터를 올바르게 인코딩하는 것입니다 (즉, 사이트에 XSS 취약성이 전혀 없습니다. 말처럼 쉬운 일이 아닙니다).
이것이 문제의 기술적 측면입니다. 또한 사용자 인터페이스 문제가 있습니다. 사용자가 링크를 클릭 할 때 URL 표시 줄이 변경되지 않아야한다고 믿도록 가르치면 (예 : 사이트에서 모든 실제 콘텐츠가 포함 된 큰 iframe을 사용함) 실제 보안의 경우에도 사용자는 미래에 아무것도 눈치 채지 못할 것입니다. 취약성. 예를 들어, 공격자가 iframe 내의 적대적인 소스에서 콘텐츠를로드 할 수 있도록하는 사이트 내에 XSS 취약점이있을 수 있습니다. URL 표시 줄이 여전히 이전 동작과 동일하게 보이고 (절대 변경되지 않음) 콘텐츠가 사용자 자격 증명을 요청하는 적대적인 도메인에서 왔음에도 불구하고 유효 해 보이기 때문에 누구도 차이를 구분할 수 없습니다.
누군가 <iframe>
귀하의 사이트 에서 요소 를 사용하는 것이 위험하고 보안 위험을 유발 한다고 주장하는 경우 , 그는 <iframe>
요소가 어떤 역할을하는지 이해하지 못 하거나 <iframe>
브라우저 의 관련 취약점 가능성에 대해 말하는 것입니다 . <iframe src="...">
태그의 보안은 브라우저에 취약점이없는 한 동일 <img src="..."
하거나 그 이상 <a href="...">
입니다. 그리고 적절한 취약성이 있다면 <iframe>
, <img>
또는 <a>
요소 를 사용하지 않아도 트리거 할 수 있으므로이 문제에 대해 고려할 가치가 없습니다.
그러나의 콘텐츠는 <iframe>
기본적으로 최상위 수준 탐색을 시작할 수 있습니다 . 즉,의 콘텐츠 <iframe>
는 현재 페이지 위치에 대한 링크를 자동으로 열 수 있습니다 (새 위치는 주소 표시 줄에 표시됨). 이를 방지하는 유일한 방법은 sandbox
값없이 속성 을 추가하는 것입니다 allow-top-navigation
. 예를 들면 <iframe sandbox="allow-forms allow-scripts" ...>
. 불행히도 샌드 박스는 항상 모든 플러그인을 비활성화합니다. 예를 들어 모든 Youtube 콘텐츠를 보려면 Flash 플레이어가 여전히 필요하기 때문에 Youtube 콘텐츠를 샌드 박스 할 수 없습니다. 플러그인 사용과 동시에 최상위 탐색을 허용하지 않는 브라우저는 없습니다.
참고 X-Frame-Options: DENY
도 (또한 "로 알려진 내용 출처 간을 읽을 수있는 성능 측면 채널 공격 렌더링에서 보호 픽셀 완벽한 타이밍 공격을 ").
"This is because content from the same origin (same domain) is allowed to access the parent content DOM (practically execute JavaScript in the "host" document)."
iframe의 (하위) 문서에 대한 XSS 취약성을 포함하는 (부모) 문서의 방향으로 다시 표현 해서는 안 됩니까?
<iframe>
페이지에서 사용 하는 경우 iframe 내의 콘텐츠에서 호스트 문서로 취약점을 확장 할 수 있습니다. 문제는 <iframe>
위험하다는 것이었고 호스트 문서에 XSS 취약성이 있다면 실제로 <iframe>
요소 가 필요하지 않습니다 .
나는 당신이 직접 제어한다면 아마도 위험이 더 낮을 것이기 때문에 교차 도메인 iFrame을 가정하고 있습니다.
iframe은 크로스 프레임 스크립팅에도 취약합니다.