Одним из наиболее частых способов заражения компьютера посетителей сайтов является использование уязвимости, связанной с переполнением буферов браузеров пользователей. Рецепт достаточно прост. Злоумышленники внедряют вредоносный код вставкой iframe на страницы сайта и пытаются загрузить на компьютер ничего не подозревающего пользователя вредоносные файлы. Обнаружить подобные вредоносные врезки на ваших сайтах достаточно легко. Стоит лишь обратить внимание на фрагменты кода, в которых используется подключение iframe. Такие вставки могут быть как в HTML, так и в PHP файлах.
Злоумышленники почти всегда пытаются максимально скрыть от владельцев использование вредоносных ставок, скрывая их визуально для пользователей ресурса и обфусцируя (запутывая) свой код.
Для маскировки вредоносной вставки хакеры в большинстве случаев применяют один и тот же метод раз за разом - выставляют свойства тега так, чтобы он не отображался на странице, но содержался в ее коде. Чаще всего, выставляется нулевая или однопикселевая ширина и длина: width="1px", height="1px".
Например, вредоносный код может выглядеть так:
Однако, часто такой маскировкой хакеры не ограничиваются, дополняя сокрытие более изощренными приемами, способными сбить с толку и усложнить поиск и устранение даже продвинутым программистам.
Это один из наиболее часто встречаемых способов защиты кода в программировании на неструктурированных языках (таких, как, например, PHP). Фактически, все шифрование заключается в самом перепутывании/запутывании кода за счет изменения имен переменных и других элементов. Как результат - распознать признаки вредоносности в запутанном коде достаточно тяжело и возможно лишь по косвенным признакам использования в явном виде специальных JS (JavaScript) функций, используемых как раз для обфускации: unescape , fromCharCode .
Однако, обнаружение обфусцированного кода на сайте не означает однозначной его вредоносности или легкости устранения. Нужно понимать, что, во-первых, злоумышленники могли обфусцировать код, захватив еще и часть рабочего кода сайта. В таком случае, при попытке вырезания зашифрованного фрагмента вы рискуете обрушить ваш ресурс. Во-вторых, обфусцированный код может не быть вредоносным, а лишь являться следствием работы вашей CMS или отдельных ее компонентов, а также, установленных вами дополнительных модулей.
В любом случае, если вы столкнулись с подозрительным обфусцированным кодом, нужно действовать с максимальной аккуратность.
Если вы сомневаетесь, является ли найденный вами код вредоносным, то можно попробовать проанализировать косвенные признаки. При наличии большого числа файлов на вашем сайте, вы можете обратить внимание на дату и время последнего изменения файлов. В случае, если вы хорошо знаете сценарии работы своей CMS с файлами, то можете присмотреться к файлам, измененным в одну дату в одно и то же время, или с изменениями, идущими с одинаковым интервалом времени, например, 1 секунда.
В случае, если вы являетесь продвинутым программистом, то можете написать скрипт, проверяющий наличии обнаруженного вами типа вставок на всех файлах вашего сайта. Если вы еще более продвинуты - можете заставить скрипт вырезать вставки, однако, всегда нужно быть аккуратным.
Мы рекомендуем вам использовать сервис Вирусдай для удаления вредоносных вставок на даже в тех случаях, когда вы являетесь продвинутым специалистом. Наш сервис не только содержит множество сигнатур, по которым находит вредоносные коды, но и экономит время! К тому же, стоимость использования Вирусдая для чистки будет, вероятно, намного ниже, чем оплата вашего же рабочего времени. Вы сможете обнаружить и удалить не только iframe вставки, но и множество других угроз. Вероятно, вы сможете найти и автоматически удалить угрозу, приведшую к появлению iframe вставок на вашем сайте, такую, как, например, Шелл.
Команда сервиса Вирусдай.
Здравствуйте, уважаемые читатели блога сайт. Сегодня речь пойдет о фреймах в языке Html. Понятное дело, что начнем мы сначала, а именно с того, что это такое за зверь. Так же поговорим о настоящем (Frame) и будущем (Iframe) этих элементов в языке гипертекстовой разметки текущей версии и в новом стандарте Html 5 при .
В конце статьи, после детального описания процесса создания встроенных фреймов и их классической структуры в Html коде (уже редко используется), мы затронем вопрос актуальности построения сайта на них, а так же обсудим возможные способы их применения в текущий период времени на примере моего блога.
Что же это такое? Оказывается, что они могут использоваться не только на сайтах, но и в каких-либо приложениях к программам, но отличаются тем, что окно web страницы или же приложения будет разделено на несколько областей, в каждую из которых загружен какой-то отдельный документ. Причем, эти области фреймов ведут себя не зависимо друг от друга.
Наверное, самый наглядный пример их использования, с которым сталкивались практически все из вас, это так называемые файлы помощи (хелпы), которые имеются у многих программ установленных на вашем компьютере.
В левое окно загружен файл с меню хелпа, а в правом выводится соответствующий выбранному пункту меню документ. Примечательно, что такая структура позволяет не подгружать в левое окно повторно файл с меню при открытии нового документа в правом. Именно в этом и состоит основное преимущество использования фреймов в Html.
Собственно, само название этих элементов следует трактовать именно как самостоятельное окно. С помощью фреймов у нас появляется возможность разбить одно большое окно на несколько фрагментов, которые в свою очередь могут служить приемниками для отдельных независимых друг от друга документов (страниц, текстов, изображений, видео и т.п.).
Как создается фреймовая структура в языке гипертекстовой разметки? Если говорить про стандарт Html 4.01 (по классификации ), который является основным на текущий момент времени, то для этого используются три элемента — Frame, Frameset и Noframes.
Если же говорить про стандарт Html 5 (наше будущее, некоторые элементы которого уже поддерживаются многими браузерами), то там тегов Frame, Frameset и Noframes, а равно и классической фреймовой структуры уже не будет, вместо них предусмотрен один единственный тэг Iframe (встроенный фрейм), о котором мы и поговорим в начале, а потом уже все внимание обратим на классическую схему из версии 4.01, которая сейчас, собственно, и используется.
Iframe в отличии от классики, которая рассмотрена ниже, не требует замены тега Body на теги Frameset. Т.е. этот тег можно будет вставлять на обычные страницы, например, внутри параграфа или в любом другом месте. По своей сути этот элемент очень похож уже на рассмотренный нами тег Img.
Он является строчным с замещаемым контентом, потому что ведет себя в точности как строчный элемент, но вот внутри него отображается посторонний внешний контент . Таких элементов в языке Html всего четыре — Img, Iframe, Object и Embed. Поэтому наш герой подразумевает наличие внешнего файла, который будет подгружаться в область, размер которой задается с помощью атрибутов этого тега.
Т.о. Iframe является сточным элементом, в который загружается внешний объект (например, видеоролик). А для указания пути до этого файла, который должен подгружаться на странице, служит специальный атрибут Src. Но в отличии от Img элемент Iframe парный, т.е. имеется еще и закрывающий тег :
В данном примере показан вывод на странице видеоролика с Youtube с помощью Iframe. Для того, чтобы ограничить область фрейма (окна), куда будет подгружаться внешний файл, предусмотрены атрибуты Width и Height , значения которых задаются в пикселах:
Т.е. этот тег создает область, в которую загружается какой-то внешний объект (не важно, с вашего ли сайта или же с другого ресурса). Ширина и высота области задаются с помощью Width и Height, а в атрибуте Src указывается путь до этого объекта.
Все эти атрибуты элемент Iframe унаследовал от подобных ему строчных тегов с замещаемым контентом (типа уже упомянутого выше Img). Ну, и еще у картинок он взял и атрибуты Hspace и Vspace , которые позволяют задать отступы от границ фрейма до обтекающего его текста.
Так же показательно, что выравнивание встроенного фрейма осуществляется абсолютно так же, как мы это могли видеть при изучении картинок в Html — . Все тот же Align , но уже для тега Iframe с возможными значениями Bottom, Top, Middle, Left и Right.
Но этот элемент взял так же и несколько атрибутов от тэга Frame из классической фреймовой структуры, о которой мы очень и очень подробно поговорим ниже по тексту. К таким атрибутам относится Name, значение которого можно использовать в качестве значения для того, чтобы нужный вам документ при переходе по ссылке открывался именно в окне этого фрейма (подробности читайте ниже).
Так же в Iframe из тега Frame перекочевал атрибут Frameborder, который имеет только два значения — либо 0 (рамка вокруг фрейма не отображается), либо 1 (рамка видна). По умолчанию используется значение Frameborder=1, поэтому для ее удаления вам потребуется прописать Frameborder="0":
Из Frame в этот элемент перешел еще и атрибут Scrolling, имеющий по умолчанию значение Auto — полосы прокрутки во фрейме будут появляться по мере необходимости, когда контент будет больше по размеру окна, предназначенного для его отображения.
Ну, и атрибуты Marginwidth и Marginheight тоже перешли из элемента Frame. Они будут подробно рассмотрены ниже по тексту, но в двух словах — они позволяют задать отступ по ширине и высоте от краев фрейма до контента, который в него помещается.
Как я уже упоминал, наглядным примером использования Iframe является :
Вставив Iframe напрямую в web страницу, вы получите вывод ролика с ютуба. Делаем вывод, что этот элемент является помесью строчных элементов с замещаемым контентом и, собственно, классических фреймов, о которых сейчас и пойдет речь.
Итак, создание классической фреймовой структуры начинается с того, что вы прописываете в Html коде вместо открывающего и закрывающего тега Body, который обычно должен присутствовать в любом документе, заменяющий его контейнер на основе элементов Frameset .
Принципиальным моментом является как раз то, что элемент Body в этом случае использовать нельзя — либо Body (для обычного документа), либо Frameset (при создании фреймовой структуры документа):
Каждый фрейм, который мы с вами формируем внутри главного, создается с помощью отдельного элемента Frame . Этот тег является одиночным и в нем мы задаем путь до того документа, который должен будет подгружаться в это окно.
Третий элемент, который мы еще с вами не затронули — это Noframes . Он парный и позволяет написать внутри себя какой-то текст, который будет обработан браузером и отображен на web странице только в том случае, если этот самый браузер (или другое устройство отображения) не поддерживает фреймы. Это может произойти, например, в случае использования какого-нибудь обозревателя для мобильных устройств.
Обычно в Noframes добавляют не только информацию о сложившейся ситуации с невозможностью обработки фреймовой структуры, но и добавляют так же возможность перейти на другие страницы, где можно будет продолжить работу без их использования. Сказать о нем что-то еще трудно, поэтому продолжим.
Получается так, что элемент Frameset, используемый заместо тега Body, занимает все место, которое отведено для области просмотра, а уже внутри этой области будут создаваться фреймы с помощью отдельных элементов Frame. В связи с этим возникает вопрос — как делить область просмотра между отдельными окнами или, другими словами, как задать размер каждого из них.
Делается это с помощью добавления соответствующих атрибутов к элементу Frameset. Их имеется целых два — Cols и Rows . Cols задает разделение большого окна на вертикальные фреймы или же колонки, а Rows позволяет разделить его на горизонтальные окна или же строки.
В качестве значений для Cols и Rows Html тега Frameset выступают числа, проставленные через запятую (без пробелов). Эти числа задают пропорции тех окон, которые мы с вами хотим получить в результате. Следовательно, сколько будет написано чисел через запятую в Cols или в Rows, столько у нас фреймов и должно будет получиться в результате.
Например, с помощью такой записи мы получим три вертикальных колонки, которые по ширине будут соответствовать пропорциям 2:5:3.