Вставляя содержимое с помощью iframe
, например с другого сайта, мы не можем контролировать, что размещенное содержимое будет делать. Возможно, на чужой странице появиться вредоносный код.
<iframe src="http://example.com"></iframe>
Существует механизм, который предотвращает некоторые виды атак —принцип одинакового источника (Same Origin Policy). Если размещенное содержимое, принадлежит другому домену то вступает в действие ограничение, которое запрещает «чужеродному» содержимому доступ к DOM родительского документа. Таким образом размещенная в iframe страница не сможет прочитать, например, куки или локальное данные браузера родительского домена. Но существует риск фишинга.
В HTML5 к тегу iframe добавился атрибут sandbox
, который позволяет управлять рядом ограничений. По умолчанию, iframe с атрибутом sandbox добавляет следующие ограничения:
- Плагины отключены. Любые виды ActiveX, Flash, или Silverlight плагинов не будут работать.
- Формы отключены. Невозможно отправить данные с формы.
- Скрипты отключены. JavaScript отключены и не будут выполняться.
- Ссылки в другой контекст отключены. Ссылки ссылающиеся на другой уровень контекста (аттрибут target) не будут работать.
- Нет доступа к информации пользователя. Содержимое не может получить доступ к DOM или прочитать информацию с куков.
Это позволяет добиться того, что содержимое iframe даже из того же самого домена будет рассматриваться как «внешнее», и будут действовать все ограничения.
<iframe src="http://example.com" sandbox></iframe>
Любые значения атрибута sandbox=» allow-forms
allow-scripts
allow-popups
allow-pointer-lock
allow-top-navigation
allow-same-origin
» не отменяют междоменные ограничения, они лишь могут ослабить ограничения для встроенного содержимого, которое принадлежит тому же домену.
Для решение задач доступа к ресурсам другого домена существует современная технология, которая носит название CORS (Cross-origin resource sharing), подробнее.