Web-инжиниринг

Hidecode


Невидимый код

Вопрос доступности JavaScript-кода пользователю рассматривается с двух точек зрения: идентификация, как следствие - необходимость скрытия кода, и безопасность пользователя, следовательно - доступность кода.

Приемы программирования со скрытым кодом позволяют решить еще несколько задач, которые не связаны с безопасностью.

Мы будем рассматривать возможность использования скрытого кода без выдачи вердиктов о преимуществе того или иного подхода. Рассмотрим несколько вариантов:

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

    Невидимый фрейм

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

    <frameset cols="100%,*">

    <frame name=left src=hcfl.htm>

    <frame name=right src=hcfl.htm>



    </frameset>

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

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



    начало страницы


    Код во внешнем файле

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

    <html>

    <head>

    ...

    <script language=JavaScript src="../css/jsc.pgm">

    *lt;/script>

    ...

    </head>

    <body onLoad="jump();">

    ...

    </body>

    </html>

    Контейнер SCRIPT определяет внешний файл размещения скриптов. Функция jump() расположена именно в этом файле. Она анализирует ссылку на данный документ и если в ней есть компонент hash(#), то она продергивает файл до якоря, указанного в hash. Чтобы убедиться в этом перейдите по любой внутренней ссылке, например, из меню разбивки раздела на подразделы, а после этого перегрузите документ по ctrl+R. Сначала документ будет загружен сначала, а потом продернут до указанного якоря.


    начало страницы


    Обмен данными посредством встроенной графики

    Данный прием основан на двух основных идеях: возможность подкачки графического образа без перегрузки страницы и возможности подкачки этого графического образа не прямо через указание URL графического файла, а через CGI-скрипт, который возвращает Content-type: image/... или осуществляет перенаправление.

    Следует при этом учитывать, что использовать метод отличный от GET можно только в формах, а мы хотим просто менять значение свойства src:

    ...

    function change_image(x)

    {

    s = "http://domain.ru/cgi-bin/image_script?"+document.cookie;

    document.x.src= s;

    ...

    &a href="javascript:change_image(i);void(0);">

    <img name=i src=image1.gif>

    </a>

    Эта безобидная последовательность операторов JavaScript позволит нам узнать важную информацию о получении cookie клиентом. "Волшебные ключики" могут не поддерживаться по разным причинам. В данном случае программа передает на сервер выставленные им "ключики" в качестве параметра скрипта под видом изменения картинки.


    начало страницы








    u="u686.25.spylog.com";d=document;nv=navigator;na=nv.appName;p=1; bv=Math.round(parseFloat(nv.appVersion)*100); n=(na.substring(0,2)=="Mi")?0:1;rn=Math.random();z="p="+p+"&rn="+rn;y=""; y+=""; y+="
    "; y+=""; d.write(y);if(!n) { d.write("








    Содержание раздела