Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

11.1. Подмножества JavaScript

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

11.1.1. Подмножество The Good Parts

Небольшая книга Дугласа Крокфорда (Douglas Crockford) «JavaScript: The Good Parts» (O’Reilly) описывает подмножество JavaScript, включающее части языка, которые, по мнению автора, достойны использования. Цель этого подмножества - упростить язык, скрыть его недостатки и в конечном счете сделать программирование проще, а программы - лучше. Крокфорд так объясняет свои устремления:

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

Подмножество Крокфорда не включает инструкции

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

Подмножество не включает оператор точки, битовые операторы и операторы

++
и
– -
. В нем также не допускается использовать операторы
==
и
! =
из-за выполняемых ими преобразований типов и требуется использовать вместо них операторы
===
и
!==
.

Поскольку в языке JavaScript отсутствует понятие области видимости блока, подмножество Крокфорда разрешает использовать инструкцию

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

Созданный Крокфордом веб-инструмент проверки качества программного кода включает возможность проверки на соответствие требованиям подмножества Good Parts. Помимо проверок на отсутствие в программном коде недопустимых особенностей, инструмент JSLint также проверяет соблюдение общепринятых правил оформления, таких как корректное оформление отступов.

Крокфорд написал свою книгу до того, как в ECMAScript 5 был определен строгий режим, и теперь многие «недостатки» JavaScript, использование которых он осуждает в своей книге, могут быть запрещены за счет использования строгого режима. Теперь, с принятием стандарта ECMAScript 5, инструмент JSLint требует, чтобы программы включали директиву «use strict», если перед проверкой был включен параметр «The Good Parts».

11.1.2. Безопасные подмножества

Good Parts - это подмножество языка, созданное исходя из эстетических соображений и желания повысить производительность труда программиста. Существует также обширная категория подмножеств, созданных с целью повышения безопасности при выполнении программного кода JavaScript в безопасном окружении, или в «песочнице». Безопасные подмножества запрещают использование особенностей языка и библиотек, которые позволяют программному коду вырваться за пределы «песочницы» и влиять на глобальное окружение. Каждое подмножество снабжается статическим инструментом проверки, который анализирует программный код, чтобы убедиться, что он соответствует требованиям подмножества. Поскольку подмножества языка, которые могут пройти статическую проверку, обычно оказываются довольно ограниченными, некоторые системы организации безопасного окружения определяют большее, не так сильно ограничивающее, подмножество, добавляют этап трансформации программного кода, на котором выполняется проверка его соответствия более широкому подмножеству, и производят трансформацию программного кода для использования с более узким подмножеством языка. А кроме того, добавляют проверки времени выполнения в тех случаях, когда статический анализ программного кода не гарантирует полную безопасность.

Чтобы обеспечить приемлемый уровень безопасности при статической проверке, из языка JavaScript должны быть исключены следующие особенности:

• Ни в одном безопасном подмножестве не допускается использовать функцию

eval
и конструктор
Function,
потому что они позволяют выполнять произвольные строки программного кода, которые невозможно проверить статически.

• Ограничивается или полностью исключается возможность использовать ключевое слово

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

• Зачастую в безопасных подмножествах запрещается использовать инструкцию

with
, потому что она усложняет статическую проверку программного кода.

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

window
. Аналогично клиентский объект
document
определяет методы, обеспечивающие полный контроль над содержимым страницы. Это слишком мощный инструмент, чтобы доверить его программному коду, не вызывающему доверия. Безопасные подмножества могут обеспечивать два разных подхода к глобальным переменным, таким как
document
. Они могут полностью запрещать их использование и определять дополнительные функции, которые могут использоваться программным кодом, заключенным в безопасное окружение, для доступа к ограниченной части веб-страницы, выделенной для него. Другой подход заключается в том, что безопасное окружение, в котором выполняется программный код, может определять промежуточный объект
document
, реализующий только безопасную часть стандартного DOM API.

  • Читать дальше
  • 1
  • ...
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: