HTML\CSS → Iframe и безопасность

Вставляя содержимое с помощью 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), подробнее.