Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Запрет просмотра сайта во фрейме

21.10.2015 | Категория: Web-мастеру и не только | Автор: ManHunter
Возвращаясь к теме защиты контента сайта, нужно упомянуть еще защиту от просмотра сайта во фрейме другого сайта. Кроме того, что никто не сможет таким способом использовать ваш контент, в какой-то мере это поможет защититься от DDoS-атак, когда на сайте с большой посещаемостью ставится скрытый iframe со ссылкой на атакуемый сайт. Посещая основной сайт, пользователи помимо своей воли открывают также и сайт-жертву, создавая огромную нагрузку на него. Такие инциденты уже неоднократно происходили. В этой статье я попытался собрать различные способы защиты сайтов от открытия во фрейме и различные способы их преодоления.

Первый способ защиты основан на скриптах JavaScript. Его суть сводится к тому, что проверяется соответствие top-окна открытой странице, если они не совпадают, значит страница открыта во фрейме. При обнаружении такой несправедливости браузер перенаправляется на другую страницу. Я использую вот такой вариант скрипта для "побега" из фрейма:
  1. // Frame-Killer #1
  2. if (top!=self) { top.location.href='/'; }
Есть еще один похожий вариант, который делает почти то же самое:
  1. // Frame-Killer #2
  2. if (top.location!=location) { top.location.href=location.href; }
И, наконец, скрипт, останавливающий загрузку страницы, если она открывается во фрейме. На мой взгляд, очень сомнительный способ.
  1. // Frame-Killer #3
  2. if (window.parent.frames.length>0) { 
  3.     // Mozilla, Opera, Chrome...
  4.     if (window.stop!=undefined) {
  5.         window.stop();
  6.     }
  7.     // для Internet Explorer
  8.     else if (document.execCommand!=undefined) {
  9.         document.execCommand("Stop"false);
  10.     }
  11. }
Все эти скрипты, понятное дело, должны находиться на защищаемом сайте. Долгое время все эти способы прекрасно работали, пока в HTML5 не появился специальный атрибут тега iframe - sandbox, который позволяет установить ограничения на контент, загружаемый во фрейме. Если этот атрибут имеет пустое значение, то на любой странице, которая открыта в этом фрейме, скрипты выполняться не будут. Соответственно, не выполнится и скрипт для "побега".
  1. <iframe src="http://your_site" sandbox=""></iframe>
"Песочница" поддерживается всеми современными браузерами (список браузеров и версии вы можете посмотреть здесь).

Читать статью целиком »
Просмотров: 12492 | Комментариев: 18

Как добавить комментарии в JSON

11.10.2015 | Категория: Web-мастеру и не только | Автор: ManHunter

Как добавить комментарии в JSON

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

Но, как оказалось, формат JSON не поддерживает комментарии (Douglas Crockford - создатель JSON, если что), а PHP, придерживаясь стандарта, при попытке декодировать файл с комментариями возвращает пустые данные. Вот для наглядности два простейших примера, как это (не) работает:
  1. $a='{
  2.     "one":1/* first number */
  3.     "two":2  /* second number */
  4. }';
  5. print_r(json_decode($a));
  6.  
  7. // Пусто :(
  1. $a='{
  2.     "one":1// first number
  3.     "two":2  // second number
  4. }';
  5. print_r(json_decode($a));
  6.  
  7. // Пусто :(
Где-нибудь в описании объектов на JavaScript подобные комментарии воспринимались бы нормально, но только не в файле JSON. В обоих случаях возвращается пустота.

Читать статью целиком »
Просмотров: 17460 | Комментариев: 6

Парсер EXIF на JavaScript

09.08.2015 | Категория: Web-мастеру и не только | Автор: ManHunter

Парсер EXIF на JavaScript

JavaScript уже давно перестал быть языком, используемым только для визуальных эффектов и манипуляции контентом на web-страничках. Теперь это полноценный язык программирования, на котором написаны целые приложения, работающие как на стороне клиента, так и на стороне сервера. В качестве еще одной демонстрации практически безграничных возможностей JavaScript, предлагаю вашему вниманию полноценный парсер EXIF-данных из JPEG-файлов, написанный на чистом JavaScript и работающий исключительно в браузере, без загрузки изображений на сервер.

Читать статью целиком »
Просмотров: 7040 | Комментариев: 7

Как на JavaScript узнать реальный размер изображения

15.06.2015 | Категория: Web-мастеру и не только | Автор: ManHunter

Как на JavaScript узнать реальный размер изображения

Для работы с масштабированными изображениями в JavaScript или эффектов типа лайтбокса, необходимо знать реальную высоту и ширину изображения. Но в CSS или в атрибутах изображения width и height можно задать любые размеры. Поэтому попытка определить реальный размер из этих атрибутов вернет неправильные значения, свойства ширины и высоты покажут текущие размеры. К счастью, современные браузеры с поддержкой HTML5 позволяют обрабатывать два дополнительных свойства: naturalWidth и naturalHeight, в которых содержатся реальные размеры изображения.

Читать статью целиком »
Просмотров: 13041 | Комментариев: 8

Кроссбраузерная стилизация input type="file" с помощью CSS

14.04.2015 | Категория: Web-мастеру и не только | Автор: ManHunter
Продолжаем тему извечного противостояния дизайнеров и верстальщиков. Основной конфликт возникает тогда, когда дизайнер рисует картинку сайта так, как нужно заказчику, а потом верстальщику приходится адаптировать под это изображение различные элементы HTML. Один из самых сложных для стилизации элементов - это поле выбора файлов, элемент input с типом file. В качестве наглядного примера, вот как он отображается в различных браузерах:


Поле input type="file" в разных браузерах

Дополнительную сложность создает то, что это поле попадает под различные правила безопасности браузеров, поэтому его нельзя, например, заменить каким-нибудь стилизованным div, нельзя обернуть тегом label, нельзя напрямую присвоить значение с помощью скриптов или вызвать окно выбора файла, сэмулировав нажатие через element.click(). А в некоторых браузерах даже нельзя сделать поле выбора файлов скрытым, так как после отправки формы его значение не будет передано на сервер. В разных интернетах я встречал попытки сделать кроссбраузерное решение, но все они, на самом деле, не универсальные и ограничиваются конкретными браузерами.

Читать статью целиком »
Просмотров: 14146 | Комментариев: 3

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 3 (0.0041 сек.) / Память: 4.5 Mb
Наверх