Раздел: Сайтостроение / JavaScript /
Безопасность в JavaScript
Что такое JavaScript
Небольшая книга о JavaScript, которая поможет вам в изучении JavaScript. В книге и рассылке сведения для начинающих: что такое JavaScript, как это работает, письма, которые помогут принять решение, надо ли вам это или нет, а также полезные ссылки на обучающие материалы. Подробнее... |
Если вам совсем неизвестны такие выражения как “политика общего происхождения”, межсайтовый скриптинг” и т.п., то советую прочитать эту статью, из которой вы (пусть и в общих чертах) узнаете некоторые особенности JavaScript, имеющие отношение к безопасности.
Как всегда напоминаю, что полный обучающий курс по JavaScript можно найти здесь:
>>> JavaScript, jQuery и Ajax с нуля до гуру >>>
Любая программа представляет потенциальную опасность для пользователя - она может быть заражена вирусом или сама являться вирусом. Поскольку любой сценарий - это, прежде всего, программа, то он также является потенциально опасным. Именно поэтому современные браузеры так докучают нам своей заботой о нашей безопасности.
С другой стороны, в мире действительно существуют немало нехороших людей, которые стремятся испортить нам жизнь, в том числе и с помощью программного кода…
Чего не может JavaScript
В JavaScript некоторые возможности намеренно НЕ поддерживаются, чтобы исключить потенциально опасные действия на стороне клиента (на вашем компьютере). То есть возможности языка намеренно ограничены, чтобы плохие ребята не смогли с его помощью получить доступ к данным на вашем компьютере или как-то навредить вашей системе, а, следовательно, и вам.
Например, JavaScript не предоставляет никакого способа записи, изменения
или удаления файлов на вашем компьютере. Без объекта File
и функций доступа к файлам это невозможно.
Вторая линия защиты - это наложение ограничений на некоторые возможности, которые, хотя и поддерживаются, но не настолько, чтобы это было опасно для пользователя. Например, клиентский JavaScript код может выполнять обмен с веб-серверами по протоколу HTTP, а также может загружать данные с FTP-серверов. Но язык JavaScript не предоставляет универсальных сетевых примитивов и не может открыть сокет или принять запрос на соединение от другого компьютера.
Далее приведён список, в котором перечислены некоторые другие возможности, которые могут быть ограничены или недоступны. Это не полный список. Кроме того, браузеры могут иметь свои ограничения, которые могут быть сняты или установлены пользователем.
Краткий список ограничений JavaScript, связанных с безопасностью:
- Сценарий JavaScript может открыть новое окно браузера, но большинство браузеров дают возможность пользователю запретить это в настройках.
- Сценарий JavaScript не может закрыть другое окно браузера без разрешения пользователя (кроме случая, когда сценарий сам открыл это окно).
- Сценарий JavaScript не может скрыть адрес ссылки, который появляется в строке состояния при наведении указателя мыши на ссылку (хотя раньше это было возможно).
- Сценарий не может открыть слишком маленькое окно (размером менее чем 100х100 пикселов) или уменьшить размеры открытого окна менее этих значений. Сценарий также не может переместить окно за пределы экрана или создать окно, размер которого больше размера экрана. Сценарий также не может создавать окна без заголовка.
- Свойство
value
HTML-элементаFileUpload
нельзя изменить в сценарии. - Сценарий не может прочитать содержимое документов с других серверов (то есть сценарий может прочитать только документ с того сервера, откуда был получен сам документ с данным сценарием). Также сценарий не может зарегистрировать обработчики событий в документах, полученных с других серверов.
Как я уже сказал, эти ограничения связаны с безопасностью. Я не стал описывать причины этих ограничений, потому как это сделало бы статью слишком большой. Итак мало кто дочитает до этого места )))
Политика общего происхождения
Политика общего происхождения накладывает ограничения на содержимое
Интернета, с которым JavaScript-код может взаимодействовать. Обычно эта
политика начинает действовать, когда на одной веб-странице располагается
несколько фреймов, включающих теги <iframe>
, или когда открываются другие окна броузера. В этом случае политика общего происхождения ограничивает возможность сценариев JavaScript из одного окна взаимодействовать с другими фреймами или окнами.
Например, сценарий может читать только свойства окон и документов, имеющих общее с самим сценарием происхождение (хотя есть способы, которые позволяют работать с несколькими окнами или фреймами).
При работе по протоколу HTTP с помощью объекта XMLHttpRequest
, который позволяет клиентским сценариям на JavaScript отправлять произвольные HTTP-запросы, политика общего происхождения делает так, чтобы эти запросы выполнялись только тому веб-серверу, откуда был загружен документ, содержащий сценарий.
ВАЖНО!
Происхождение самого сценария не имеет никакого отношения к политике общего происхождения, потому что значение имеет ТОЛЬКО происхождение документа, в который встраивается сценарий.
Политика общего происхождения (да и вообще все меры безопасности) создают веб-программистам немало сложностей. Но такова жизнь…
В конце концов, всегда можно найти способ обойти то или иное ограничение.
Межсайтовый скриптинг
Межсайтовый скриптинг (cross-site scripting), или XSS - это компьютерная уязвимость, когда злой хакер внедряет HTML-теги или сценарии в документы на сайте, к которому он получил доступ.
Защита от XSS атак - это обычное дело для веб-разработчиков, которые занимаются созданием серверных сценариев. Однако программисты, разрабатывающие клиентские сценарии на JavaScript, также должны знать о XSS-атаках и принимать меры для защиты от них.
Веб-страница считается уязвимой для XSS-атак, если она динамически создает содержимое документа на основе пользовательских данных, не прошедших предварительную обработку по удалению встроенного HTML-кода.
Это всё, что вам нужно знать о XSS (шутка).
Конечно, это не всё. Но погружаться далее в эти дебри сегодня мы не будем. Для начинающих достаточно просто помнить, что такая угроза существует.
Атаки типа отказа в обслуживании
Различные меры безопасности, используемые браузерами, ограничения возможностей языка и т.п. худо-бедно защищают данные клиента от посягательств со стороны злонамеренного программного кода. Однако они не могут предотвратить атаки типа отказа в обслуживании.
Если вы попадёте на нехороший сайт и ваш браузер начнёт выполнять сценарий JavaScript, где есть бесконечный цикл, выводящий, например, диалоговое окно, то вам придется убивать процесс, чтобы завершить работу браузера.
Исходный код сценария-злоумышленника может также попробовать загрузить процессор компьютера бесконечным циклом с бессмысленными вычислениями.
И хотя некоторые браузеры автоматически определяют подобные нехорошие циклы и предлагают пользователю их прервать, всё-равно это, во-первых, неприятно, а во-вторых, не всегда работает (ведь хакеры тоже не дураки и умеют обходить подобные защиты).
Подходящего для всех случаев способа предотвращения таких атак в браузерах не существует. Но в то же время особой опасности (кроме нервного стресса))) для пользовательских данных это не представляет.
Ну что же, на этом краткий обзор вопросов безопасности закончим. Напоминаю, что эта статья - лишь капля в море знаний о JavaScript. Если хотите испить эту чашу до дна, то изучить этот язык, а также jQuery и Ajax можно здесь:
>>> JavaScript, jQuery и Ajax с нуля до гуру >>>
Вступить в группу "Основы программирования"
Подписаться на канал в РУТУБ Подписаться на Дзен-канал Подписаться на рассылки по программированию |
Программирование на JavaScript
Видеокурс о программировании на JavaScript. Содержит 8 больших разделов от основ до работы с сетевыми запросами. В комплекте 5 подарков - мини-курсов по темам, связанным с сайтостроением. 72 урока продолжительностью более 13 часов. Упражнения и примеры исходных кодов. Поддержка от автора. Подробнее... |