Опубликован: 04.05.2010 | Доступ: свободный | Студентов: 4032 / 454 | Оценка: 4.64 / 4.44 | Длительность: 41:24:00
Лекция 9:

Создание динамического наполнения страницы. Основы JavaScript

12.1.6. Встраивание в веб-страницы

Для добавления JavaScript -кода на страницу, можно использовать теги <script></script>. Скрипт, выводящий модальное окно с классической надписью "Hello, World!" внутри браузера:

<script type="text/javascript">
alert('Hello, World!');
</script>
12.1.6.1. Расположение внутри тега

Спецификация HTML описывает набор атрибутов, используемых для задания обработчиков событий. Пример использования:

<a href="delete.php" onclick="return confirm('Вы уверены?');">Удалить</a>
12.1.6.2. Отделение от разметки

В приведенном примере при нажатии на ссылку функция confirm('Вы уверены?') ; вызывает модальное окно с надписью "Вы уверены?", а return false; блокирует переход по ссылке. Разумеется, этот код будет работать, только если в браузере есть и включена поддержка JavaScript, иначе переход по ссылке произойдет без предупреждения.

Использование кода JavaScript в контексте разметки страницы в рамках ненавязчивого JavaScript расценивается как плохая практика. Аналогом (при условии снабжения ссылки идентификатором alertLink ):

<a href="delete.aspx" id="alertLink">Удалить</a>

приведенного примера может выступать, например, следующий фрагмент JavaScript:

window.onload = function() {
    var linkWithAlert = document.getElementById("alertLink");
    linkWithAlert.onclick = function() {
        return confirm('Вы уверены?');
    };
};
12.1.6.3. Вынесение в отдельный файл

Есть и третья возможность подключения JavaScript – написать скрипт в отдельном файле, а потом подключить его с помощью конструкции:

<script type="text/javascript" src="http://Путь_к_файлу_со_скриптом"></script>
12.1.6.4. Атрибуты тега script

Тег script, широко используемый для подключения к странице JavaScript, имеет несколько атрибутов.

  • обязательный атрибут type для указания MIME-типа содержимого; необязательный атрибут src, принимающий в качестве значения адрес к файлу со скриптом;
  • необязательный атрибут charset, используемый вместе с src для указания используемой кодировки внешнего файла;
  • необязательный атрибут defer, используемый для того, чтобы показать, что скрипт не генерирует никакого содержимого (что означает, в частности, то, что в этом скрипте отсутствует вызов document.write() ).

При этом атрибут language (language="JavaScript"), несмотря на его активное использование, относится к не рекомендуемым (deprecated), отсутствует в DTD, поэтому считается некорректным.

12.1.7. Область применения

12.1.7.1. Веб-приложения

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

12.1.7.2. AJAX

JavaScript используется в AJAX, популярном подходе к построению интерактивных пользовательских интерфейсов Веб-приложений, заключающемся в "фоновом" асинхронном обмене данными браузера с Веб-сервером. В результате, при обновлении данных Веб-страница не перезагружается полностью и интерфейс Веб-приложения становится быстрее, чем это происходит при традиционном подходе (без применения AJAX) [6].

12.1.7.3. Comet

Comet – термин, описывающий механизм работы Веб-приложений, использующих постоянные HTTP-соединения, что позволяет Веб-серверу отправлять данные браузеру без дополнительного запроса со стороны браузера. Для таких приложений используются технологии, непосредственно поддерживаемые браузерами. В частности, в них широко используется JavaScript. Сама технология Comet позволяет создавать чаты, графики биржевых котировок в браузере [7].

12.1.7.4. Браузерные операционные системы

JavaScript широко используется в браузерных операционных системах. Так, например, исходный код IndraDesktop WebOS на 73 % состоит из JavaScript, код браузерной операционной системы IntOS – на 70 %. Доля JavaScript в исходном коде eyeOS – 21 % (рис. 12.1), однако и в рамках этой операционной системы JavaScript играет важную роль, участвуя в визуализации на клиенте и являясь необходимым механизмом для коммуникации клиента и сервера.

Пример сеанса eyeOS [8]

увеличить изображение
Рис. 12.1. Пример сеанса eyeOS [8]
12.1.7.5. Пользовательские скрипты в браузере

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

12.1.7.6. Серверные приложения

Приложения, написанные на JavaScript, могут исполняться на серверах, использующих Java 6 и более поздних версий. Это обстоятельство используется для построения серверных приложений, позволяющих обрабатывать JavaScript на стороне сервера. JavaScript на стороне сервера используется в проектах Google. Так, например, Google Sites допускает подстройку с помощью JavaScript -сценариев, исполняемых движком Rhino.

12.1.7.7. Мобильные приложения

Перевод мобильных устройств Palm на использование Palm webOS в качестве операционной системы с Mojo SDK в качестве средств разработки позволяет использовать JavaScript в качестве языка разработки мобильных приложений.

12.1.7.8. Виджеты

Виджет – вспомогательная мини-программа, графический модуль, которой размещается в рабочем пространстве соответствующей родительской программы, служащая для украшения рабочего пространства, развлечения, решения отдельных рабочих задач или быстрого получения информации из интернета без помощи веб-браузера. JavaScript используется как для реализации виджетов, так и для реализации движков виджетов. В частности, при помощи JavaScript реализованы Apple Dashboard, Microsoft Gadgets, Yahoo! Widgets, Google Desktop Gadgets .

12.1.7.9. Прикладное программное обеспечение

JavaScript используется для написания прикладного ПО. Одним из ярких примеров является Mozilla Firefox, 57 % исходного кода которого написано на JavaScript (для сравнения, следующим языком программирования по объему кодовой базы Firefox является C++, доля которого составляет 17 % ).

Google Chrome OS в качестве прикладного ПО использует Веб-приложения.

12.1.7.10. Манипуляция объектами приложений

JavaScript также находит применение в качестве скриптового языка доступа к объектам приложений. Платформа Mozilla (XUL/Gecko) использует JavaScript. Среди сторонних продуктов, например, Java, начиная с версии 6, содержит встроенный интерпретатор JavaScript на базе Rhino. Сценарии JavaScript поддерживаются в таких приложениях Adobe, как Adobe Photoshop, Adobe Dreamweaver, Adobe Illustrator и Adobe InDesign.

12.1.7.11. Офисные приложения

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

12.1.8. Библиотеки JavaScript

Для обеспечения высокого уровня абстракции и достижения приемлемой степени кросс-браузерности при разработке веб-приложений используются библиотеки JavaScript. Они представляют собой набор многократно используемых объектов и функций.

Среди известных JavaScript библиотек можно отметить Adobe life, Dojo Toolkit, ExtJS, jQuery, Mootools, Prototype, Qooxdoo [9, 10, 11, 12]. Некоторые из этих библиотек будут рассмотрены в следующей лекции.

12.1.9. Поддержка браузерами

На сегодняшний день поддержку JavaScript обеспечивают современные версии всех наиболее часто используемых браузеров. В Internet Explorer, Mozilla Firefox, Safari, Chrome, Opera имеется полная поддержка третьей редакции ECMA-262. При этом в Mozilla Firefox предпринята попытка осуществления поддержки четвертой редакции спецификации, а первым браузером, в котором появилась неполная поддержка спецификации 3.1, явился Internet Explorer 8.

12.1.10. Безопасность

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

  • JavaScript -программы выполняются в песочнице ( sandbox ), в которой они могут выполнять только ограниченный круг действий, а не задачи программирования общего назначения (например, создание файлов, работа с сокетами);
  • для JavaScript -кода применяется политика общего происхождения, в соответствии с которой скрипт, встроенный в страницу не может получить доступ к ряду свойств объектов другой страницы (в частности, к большинству свойств объекта document ) при отличии в протоколе, хосте и номере порта этих страниц.

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

12.1.10.1. Межсайтовые уязвимости

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

Уязвимости XSS также происходят из-за ошибок, допущенных разработчиками браузеров.

Другим типом межсайтовой уязвимости является подделка межсайтовых запросов или CSRF. Она заключается в возможности сайта злоумышленника заставить браузер пользователя осуществить нежелательное действие на целевом сайте (например, банковский перевод денег). Такая возможность имеется, если целевой сайт полагается только на HTTP cookie или запросы авторизации. В этом случае запросы, инициализированные кодом сайта злоумышленника, выполняются так же как запросы пользователя, если он авторизован на целевом сайте. Одним из средств защиты от CSRF является осуществление аутентификации при любом запросе, который приводит к необратимым последствиям.

12.1.10.2. Ошибки в браузере, плагинах и расширениях

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

Подобные ошибки выявлялись у часто используемых браузеров, включая Mozilla Firefox, Internet Explorer, Safari. При выявлении потенциально опасных ошибок в браузере и наличия сведений о реализованных эксплойтов фирма-производитель и эксперты по безопасности рекомендуют отключать JavaScript до выхода патча.

Плагины, такие как плееры, Macromedia Flash и ряд ActiveX компонент, доступных по умолчанию в Internet Explorer, могут также содержать ошибки, эксплуатируемые с помощью JavaScript, что уже случалось ранее.

Расширения Mozilla Firefox не изолированы друг от друга: одно расширение может исправлять другое, что может использоваться злоумышленниками.

12.1.10.3. Ошибки реализации песочницы

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

Неправильное наделение привилегиями JavaScript из Интернета служило причиной уязвимостей как Internet Explorer, так и Mozilla Firefox.

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