Статьи

Совет: заблокируйте ваш SWF для определенного доменного имени

Вы хотите сохранить свой SWF эксклюзивным для своего сайта? В этом кратком совете мы рассмотрим, как использовать «блокировку сайта», чтобы люди не загружали ваш SWF-файл и не вставляли его на другой веб-сайт.


Вот файл, запущенный в неверном домене:

Мы создадим анимированный экран, который будет активирован, когда SWF находится не в том домене, как в примере выше. Сказав это, если вы просто хотите узнать о коде блокировки сайта, перейдите к шагу 5 .


Прежде чем вы начнете писать код и добавлять дизайны на сцену, вы должны сначала получить Tweener. Для этого проекта я использовал открытый исходный код, который можно использовать для открытых и коммерческих проектов. Каурина твинер доступна на code.google.com .

После того, как вы скачали Tweener, просто скопируйте и вставьте его в папку вашего проекта. Помните, что папка должна называться caurina , внутри папки должна быть папка с именем transitions, и внутри нее загружаются файлы класса .as Flash.

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


Размер файла не имеет значения. Свойство блокировщика домена заключается в блокировке вашего SWF или компонента на случай, если кто-то скачал его у вас без вашего разрешения.

В этом примере я использовал размер сцены 540 x 400, вы можете использовать любой размер, какой захотите.

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


После того, как вы создали 3 слоя, создайте 2 новых простых мувиклипа. Размещайте их где хотите, любого размера. Высота 40 пикселей на ширину 10 пикселей, скажем, без обводки. Позиционирование не имеет значения, потому что мы будем размещать эти мувиклипы по ActionScript позже.

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

И, конечно же, имена экземпляров:

Поздравляем! Вы добавили поля, которые будут закрывать страницу на случай, если домен неверен. Теперь добавьте динамическое текстовое поле в середину сцены или в любое место, где вы хотите. Это текстовое поле сообщит пользователю, который незаконно загрузил файл, о том, что файл защищен сценарием. Дайте ему имя экземпляра warning_txt


Теперь, когда вы создали мувиклипы и текстовое поле, вы готовы к написанию кода. На слое заблокированных действий нажмите F9 и добавьте следующий код:

1
2
3
4
5
6
7
import flash.events.*;
import flash.display.LoaderInfo;
import flash.display.MovieClip;
import flash.net.navigateToURL;
import flash.net.URLRequest;
import flash.net.URLVariables;
import caurina.transitions.Tweener
  • flash.events.*; загружает все события, которые нам, вероятно, понадобятся.
  • flash.display.LoaderInfo; выводит всю информацию, которую нам нужно загрузить, и она будет загружена вместе с файлом.
  • flash.flash.display.MovieClip; загружает все события, с которыми мы столкнемся при использовании мувиклипов.
  • import caurina.transitions.Tweener; загружает наш движок анимации и анимацию полос блокировки контента.

Остальные загруженные события необходимы для того, чтобы Flash получил доступ к URL-адресу страницы в панели.


1
var url:String = stage.loaderInfo.url;

Предположим, что SWF-файл загружен на страницу http://www.domainName.com/siteFolder/sitePage.html . Строка 9 получает этот URL-адрес и присваивает его строке, называемой url .


Теперь, когда Flash знает, откуда взять URL, пришло время сравнить это с URL нашего веб-сайта и принять меры, если они совпадают или нет

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function pageDomainCheckInit(event:Event):void {
    if (url != «http://www.domainName.com/siteFolder/sitePage.html») {
     
        warning_txt.text=»This file is running on the wrong URL. Content Access Restricted!»;
        closeBoxTop.x = 0
        closeBoxTop.visible = true;
        closeBoxTop.height= stage.stageHeight/2
        Tweener.addTween(closeBoxTop,{width:stage.stageWidth, alpha: 0.8, time:1, transition:»easeInOutExpo»});
 
        closeBoxBottom.x = stage.stageWidth
        closeBoxBottom.visible = true;
        closeBoxBottom.height= stage.stageHeight/2
        Tweener.addTween(closeBoxBottom,{width:stage.stageWidth, time:1, alpha: 0.8, transition:»easeInOutExpo»});
    } else {
     
        warning_txt.text=» «;
        closeBoxTop.visible = false;
        closeBoxBottom.visible = false;
    }
    stage.removeEventListener(Event.ENTER_FRAME, pageDomainCheckInit);
}
 
stage.addEventListener(Event.ENTER_FRAME, pageDomainCheckInit);

Мы использовали прослушиватель событий, чтобы начать проверку ранее обнаруженной строки URL. В основном это говорит flash, что если строка, расположенная на панели навигации (или URL-адрес, на котором размещена страница), не является правильной, то страница выполнит сценарий блокировки контента и предупредит пользователя о том, что домен неверен. В противном случае, если страница размещена правильно, поля, закрывающие страницу, не будут отображаться, равно как и текст предупреждения.

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

1
if (url != «http://www.domainName.com/siteFolder/sitePage.html») {

Этот раздел кода, в основном, «ЕСЛИ НЕ», поэтому, если страница не http://www.domainName.com/siteFolder/sitePage.html Flash начнет выполнять функции ниже IF, но в противном случае — если SWF находится на правильной странице — Flash удалит блоки со сцены и сохранит все в чистоте и порядке. Вы никогда не узнаете, что это там.

Теперь посмотрим, что происходит, когда файл находится не в нужном домене.

01
02
03
04
05
06
07
08
09
10
warning_txt.text=»This file is running on the wrong pageDomain. Content Access Restricted!»;
closeBoxTop.x = 0
closeBoxTop.visible = true;
closeBoxTop.height= stage.stageHeight/2
Tweener.addTween(closeBoxTop,{width:stage.stageWidth, alpha: 0.8, time:1, transition:»easeInOutExpo»});
 
closeBoxBottom.x = stage.stageWidth
closeBoxBottom.visible = true;
closeBoxBottom.height= stage.stageHeight/2
Tweener.addTween(closeBoxBottom,{width:stage.stageWidth, time:1, alpha: 0.8, transition:»easeInOutExpo»});

Код, который вы видите здесь, помещает closeBoxes в начало и конец этапа ( closeBoxTop = 0 , closeBoxBotton = stage.stageWidth ) и делает их невидимыми ( closeBoxTop.visible = false, closeBoxBottom.visible = false ), что скрывает их от этапа защищает их от просмотра и не влияет на внешний вид сайта. Тем не менее они есть.

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

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


Что если мы хотим проверить, загружен ли SWF-файл в определенный домен?

Поэтому вместо того, чтобы проверять, находится ли SWF по адресу http://www.domainName.com/siteFolder/sitePage.html , мы просто проверяем, находится ли он где-нибудь на веб-сайте domainName.com . Так что это может быть на https://private.domainName.com/secure/secret.html и по-прежнему работать.

Мы можем добиться этого, отредактировав код, который получает URL, например:

1
2
3
4
5
6
7
var url:String = stage.loaderInfo.url;
var urlBeginning:int = url.indexOf(«://») + 3;
var urlTermination:int = url.indexOf(«/», urlBeginning);
var pageDomain:String = url.substring(urlBeginning, urlTermination);
var lastDot:int = pageDomain.lastIndexOf(«.») — 1;
var CharacterAfterDomain:int = pageDomain.lastIndexOf(«.», lastDot) + 1;
pageDomain = pageDomain.substring(CharacterAfterDomain, pageDomain.length);

Предположим, что SWF-файл загружен на страницу http://www.domainName.com/siteFolder/sitePage.html . Строка 9 получает этот URL и присваивает его строке, называемой url . Это та же самая линия, что и раньше.

Строка 10 кода извлекает позицию в URL-адресе ://

Строка 11 кода извлекает первое / которое появляется в URL после :// . Это на самом деле очень важно, потому что между ними может быть найдено ваше фактическое доменное имя.

Строка 12 кода — это просто установление связи внутри Flash между тем, что находится между: // и первым / получение доменного имени String для проверки на следующем шаге. На данном этапе, в нашем примере, pageDomain был установлен на www.domainName.com .

Оставшийся код проверяет строку имени домена, что перед ним (что означает «www» или «http: // www.») И что следует за именем вашего домена (что означает «.»).

Все это игнорируется, так что Flash может определить фактическое доменное имя. domainName.com . Вместо проверки:

1
if (url != «http://www.domainName.com/siteFolder/sitePage.html») {

… мы проверяем:

1
if (pageDomain != «domainName.com») {

Основная проблема этого метода заключается в том, что он не работает для доменов, состоящих из трех частей. Например, domainName.co.uk — этот код получит «.co.uk» в качестве значения pageDomain. Тем не менее, это мой предпочтительный метод, как я объясню на следующем шаге.


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

Тот факт, что код if (pageDomain != "domainName.com") , очень важен. Это позволит вам добавить этот код к каждому файлу на вашем сайте, субдомене, расположению с глубокими ссылками; пока ваша ссылка находится на этом домене, файл будет работать, а блокировка домена не сработает!

Тем не менее, может быть полезно заблокировать что-то более конкретное, чем доменное имя. Предположим, вы размещаете свой веб-сайт на таком хосте, как Amazon S3. Тогда ваш URL будет похож на http://yoursitename.s3.amazonaws.com/folder/page.html . Но кто-то еще на Amazon S3 может иметь URL-адрес http://someoneelse.s3.amazonaws.com/ . Они могут загрузить SWF на свой сайт, и, поскольку SWF все еще будет на amazonaws.com, блокировка домена не будет заблокирована.

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

Познакомьтесь с оператором AND: && Используя эту команду в первом контролере, вы можете добавить столько доменов, сколько пожелаете. Позвольте мне показать вам, как! ?

Проверка одного домена:

(pageDomain!="domainName.com")

Проверка нескольких доменов:

( (pageDomain!="domainName.com") && (pageDomain != "mydomain.com") && (pageDomain != "hisdomain.com") ) действительно просто, не так ли?


Ну, это оборачивает это. Как вы все знаете, полная защита флеш-файлов никогда не гарантируется на 100%, но это всего лишь еще один шаг — сделать ваш сайт более безопасным, качественным и безопасным от кражи файлов. Не забудьте зашифровать свои файлы перед их добавлением на сервер! Спасибо за чтение этого учебника, надеюсь, он был вам полезен, если вам нужна дополнительная помощь, не стесняйтесь оставлять свои вопросы в разделе комментариев.