외부문서 삽입
iframe
외부문서를 삽입할 때 사용하는 태그이다.
<html>
<body>
<iframe width="400" height="240" src="https://www.youtube.com/embed/DbyILRPrIfo"></iframe>
</body>
</html>
일반적으로 비디오를 문서에 참조할 때 많이 사용되기도 한다.
웹에서 플레이가 가능한 프로그램이라면 iframe으로 바로 참조한 프로그램도 바로 플레이가 가능하다.
보안 문제
웹에서 바로 로딩을 할 수 있다는 점이 편리하지만 때론 독이 되기도 한다.
검증되지 않은 출처의 문서를 삽입하는 경우 내 웹 페이지를 통해서 다른 방문자들이 문서를 열람하는 방식으로 문제를 발생기킬 수 있기 때문에 보안에 대한 지식이 없다면 iframe 태그의 사용은 권장되지 않는다.
보안 문제 예시
하나의 소스 문서를 만들고 다른 문서에서 iframe으로 가져와서 웹에 띄우는 준비 단계를 만들어 놓는다.
<!-- iframe.html -->
<!DOCTYPE html>
<html>
<body>
<iframe src="iframe_source.html" frameborder="0"></iframe>
</body>
</html>
<!-- iframe_source.html -->
<!DOCTYPE html>
<html>
<head>
<style>
body{
background-color:tomato;
color:PowderBlue;
}
</style>
</head>
</html>
자바스크립트를 사용하여 코드를 작성한다.
<!-- iframe_source.html -->
<!DOCTYPE html>
<html>
<head>
<style>
body{
background-color:tomato;
color:PowderBlue;
}
</style>
</head>
<body>
<script>
alert('Hello World!');
</script>
</body>
</html>
입력한 자바스크립트 코드는 Hello World! 문구의 알림창을 띄우는 동작을 한다.
즉 이런식으로 외부 문서를 iframe으로 가져왔을 뿐이지만 그 외부 문서안에 작성된 자바스크립트 코드를 통해 페이지에서 특정 동작을 작동시킬 수 있게 된다.
자바스크립트는 복잡하면서 다양한 기능들을 수행할 수 있기 때문에 단순히 알림창을 띄우는것이 아닌 더 심각한 문제를 가져올 수 있다.
해결 방법
기본적으로 신뢰할 수 없는 문서는 가져오지 않는것이 우선이다.
그 다음에 추가적으로 보안을 하기 위해서는 iframe 태그에 속성을 추가한다.
<!-- iframe.html -->
<!DOCTYPE html>
<html>
<body>
<iframe src="iframe_source.html" frameborder="0" sandbox></iframe>
</body>
</html>
sandbox를 추가해주면 iframe으로 삽입한 문서안의 자바스크립트와 같은 위험할 수 있는 행위를 원척적으로 차단시킨다.