Без опасный JavaScript. Изучаем проблемы кода на JS

Интересное из сети

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

Пять причин, почему сложно писать безопасный код на JS

1. компиляторы бесполезны

JavaScript — это интерпретируемый язык. Это означает, что компилятор не будет постоянно жаловаться, отказываться работать или давить на вас, требуя исправить ошибки и оптимизировать код.

2. динамическая природа JavaScript

JavaScript динамичен, слабо стандартизирован и асинхронен. А это все признаки того, что вы, скорее всего, попадете в беду.

Такие языковые средства, как eval и включение стороннего кода через script src, позволяют выполнять строки непосредственно во время выполнения. Поэтому трудно «статически гарантировать», что код будет работать определенным образом. Динамический анализ также может быть затруднен (см. научные работы).

Использование eval

Использование оценки.

Отсутствие стандартизации затрудняет использование стандартных методов статического анализа, по крайней мере, по сравнению со статически типизированными языками (например, Java).

Асинхронные сбои, которые позволяют вызывать JavaScript через такие механизмы, как setTimeout или XMLHttpRequest (известный по AJAX), по статистике скрывают самые опасные ошибки.

3. сложная функциональность JS

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

ЧИТАТЬ ЕЩЁ:  17 идей по маркетинговому продвижению контента

Оригиналы. Это означает, что программа написана в духе объектно-ориентированного подхода, но без использования классов. При таком подходе объекты наследуют необходимые свойства непосредственно от других объектов (прототипов). В JS прототипы можно переопределять непосредственно во время выполнения. Когда происходит переопределение, эффект немедленно применяется ко всем объектам, которые наследуют свойства переопределенного прототипа.

Как обрабатываются прототипы

Как обрабатываются прототипы?

Не будет преувеличением сказать, что в новой спецификации ECMAScript также есть классы.

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

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

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

4. тесное взаимодействие между JavaScript и DOM

Это необходимо для обеспечения «бесшовного» обновления веб-страниц во время выполнения. Как мы знаем, DOM — это стандартная, независимая от платформы и языка объектная модель, предназначенная для визуализации HTML и XML документов. DOM имеет свой собственный API для манипулирования отображаемым документом, динамического доступа, перемещения и обновления отображаемого документа (содержимого, структуры и стиля). Изменения в DOM могут быть сделаны динамически с помощью JavaScript. Затем эти изменения сразу же отображаются в браузере.

ЧИТАТЬ ЕЩЁ:  Аукцион доменов в погоне за именем Вебмастеру

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

Наиболее распространенные ошибки в веб-приложениях

Наиболее распространенные ошибки в веб-приложениях: 1. Использование JS или DOM в DOM

5. сложные событийно-ориентированные взаимодействия.

JavaScript — это язык, управляемый событиями. Это позволяет разработчикам регистрировать так называемые «слушатели событий» в узлах DOM. Большинство событий запускается действиями пользователя, но некоторые могут быть запущены без действий пользователя, например, события по времени или асинхронные вызовы. Каждое событие отражается по всему дереву DOM, и несколько слушателей могут быть запущены одновременно. Отследить все это может быть очень сложно.

Как обрабатываются события

Как обращаться с инцидентами

По этим причинам JS-код может быть трудно понять, проанализировать и провести аудит. По этим причинам JS-код может быть сложным для понимания, анализа и тестирования, что облегчает работу веб-разработчика и усложняет создание безопасного кода.

Продолжение следует, только для членов клуба.

Вариант 1: Присоединиться к сообществу Xakep.ru и читать все материалы сайта

Вступив в сообщество на определенный срок, вы получите доступ ко всем «хакерским» материалам, сможете скачивать темы в формате PDF, отключить рекламу на сайте и увеличить свою персональную накопительную скидку! Узнать больше

Вариант 2. открыть статью

Вас заинтересовала статья, но у вас нет возможности стать участником «Xakep.ru»? Тогда этот вариант для вас! Примечание: Этот вариант подходит только для статей, опубликованных два месяца назад.

Оцените статью