SharePoint Alfresco PHP MySQL
О сайте Контакты
четверг, 23 февраля 2012 г.

Как запретить показ своего сайта во фреймах (frame и iframe)?

Представьте, что вы разработали сайт, который имеет хорошую посещаемость. Тогда злоумышленник захочет встроить ваш сайт или какую-то его страницу в свой фрейм, чтобы затем манипулировать данными, которые пользователи вводят якобы на вашем сайте. Этот вид атаки известен как кликджекинг (Clickjacking).

Упрощенный пример кода злоумышленника, использующего ваш сайт, приведен ниже.

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <title>Some stupid title here</title>  
</head>
<frameset cols="100%,*" frameborder="no" border="0" framespacing="0">
  <frame name="SiteShowFrame" src="http://www.your-site.com/">
</frameset>
<noframes>
  <body>
   Your browser doesn\'t support frames
  </body>
</noframes>
</html>

Есть несколько способов борьбы с встраиванием вашего сайта в чужой фрейм. Основные из них:

1) Проверка на Javascript

В head вашего документа вы можете вставить следующий код:

<script type="text/javascript">    
  if (window.parent.frames.length > 0) {
    window.stop();
  }
</script>

Он позволит выявить, загружается ли ваш документ во фрейме, если да – то загрузка останавливается соответствующей командой.

2) Отправка серверного заголовка, запрещающего браузеру показывать содержимое во фрейме

Для сервера Apache вы можете вставить в файл .htaccess следующий код:

Header always append X-Frame-Options DENY

Он говорит браузеру, что ваше содержимое недоступно для показа во фрейме. Однако, только современные браузеры понимают такую команду, но это можно не считать недостатком.

DENY полностью запрещает показ содержимого сайта в любых фреймах. Если вы сами используете для каких-то целей фреймы на своем сайте, то вместо DENY можно указать SAMEORIGIN. Тогда браузер будет допускать содержимое во фреймах только с вашего же источника.

Подробнее о данном методе - https://developer.mozilla.org/en-US/docs/The_X-FRAME-OPTIONS_response_header

Sergey Lysenko, четверг, 23 февраля 2012 г.

Комментарии: