Межсайтовый скриптинг (XSS) — это тип эксплойта безопасности, который позволяет злоумышленникам внедрять вредоносные скрипты на веб-сайты с помощью клиентского кода. Он представляет собой серьезную угрозу, поскольку злоумышленники могут использовать его, чтобы выдавать себя за пользователей, получать доступ к конфиденциальным данным или даже изменять содержимое страниц веб-сайта.
Он настолько опасен, что в 2021 году занял второе место в общем списке 25 самых опасных слабостей. Это означает, что если вы создаете веб-сайты, вы должны знать о межсайтовых сценариях и о том, как их предотвратить.
Как работает межсайтовый скриптинг?
Прежде чем понять, как работает межсайтовый скриптинг, важно понять, что означает политика единого источника (SOP). SOP — это политика механизма безопасности, которая запрещает веб-сайту (одному источнику) чтение или запись на другой веб-сайт (другой источник). Он не позволяет вредоносным веб-сайтам отправлять вредоносный код на доверенные веб-сайты.
Атаки с использованием межсайтовых сценариев пытаются обойти эту политику, используя неспособность браузера отличить законный HTML-код от вредоносного кода. Например, злоумышленник может внедрить код JavaScript на целевой веб-сайт. Предположим, что браузер выполняет код, и злоумышленник получает доступ к токенам сеанса, файлам cookie и другим конфиденциальным данным.
Есть три типа межсайтовый скриптинг, который хакеры используют для взлома веб-сайтов: отражено, сохранено и DOM XSS.
Как предотвратить межсайтовый скриптинг в Node
Ниже приведены некоторые шаги, которые вы можете предпринять, чтобы предотвратить межсайтовые сценарии в Node.
Очистить ввод
Злоумышленники должны иметь возможность отправлять данные в ваше веб-приложение и отображать их пользователю, чтобы выполнить XSS-атаку. Поэтому первая превентивная мера, которую вы должны предпринять, — это очистка всех входных данных, которые ваше приложение получает от своих пользователей. Это очень важно, потому что он обнаруживает фиктивные данные до того, как сервер их выполнит. Вы можете сделать это вручную или использовать такой инструмент, как валидатор что ускоряет процесс.
Например, вы можете использовать валидатор чтобы избежать тегов HTML в пользовательском вводе, как показано ниже.
импорт валидатор из "валидатор";
пусть userInput = `Джейн <загрузка скрипта ="тревога('XSS-хак');"></script>`;
позволять sanitizedInput = validator.escape(userInput);
Если бы вы запустили приведенный выше код, очищенный вывод был бы таким.
Джейн &л; загрузка скрипта =" тревога('XSS-хак');"&гт;&л;/ сценарий&гт;
Ограничить ввод данных пользователем
Ограничьте тип ввода, который пользователь может отправить в форму посредством проверки. Например, если у вас есть поле ввода для электронной почты, разрешайте ввод только в формате электронной почты. Таким образом, вы минимизируете вероятность того, что злоумышленники отправят неверные данные. Вы также можете использовать для этого пакет валидатора.
Внедрить политику cookie только для HTTP
Файлы cookie хранят данные в локальном кеше и отправьте его обратно на сервер через HTTP. Но злоумышленники также могут использовать JavaScript для доступа к ним через браузер, поэтому они становятся легкой мишенью.
Файл cookie только для HTTP — это политика, которая запрещает скриптам на стороне клиента доступ к данным файлов cookie. Это означает, что даже если ваше приложение содержит уязвимость и злоумышленник использует ее, он не сможет получить доступ к файлу cookie.
Вот пример того, как вы можете реализовать политику cookie только для HTTP в Node.js с помощью Express:
приложение.использовать(выражать.сессия({
секрет: "секрет",
куки: {
httpТолько: истинный,
безопасный: истинный
}
}))
Если злоумышленник попытался получить доступ к файлу cookie с httpТолько установлен в значение true, как показано выше, они получат пустую строку.
Межсайтовый скриптинг — легкая мишень для хакеров
Хотя обеспечение безопасности вашего приложения имеет решающее значение, его реализация может быть сложной. В этом посте вы узнали об атаках с использованием межсайтовых сценариев и о том, как их можно предотвратить в Node. Поскольку злоумышленники используют уязвимости в вашем приложении для внедрения вредоносного кода на ваш сервер, всегда проверяйте, что вы санируете пользовательский ввод. Делая это, вы удаляете вредоносный код до того, как ваше приложение сохранит или выполнит его.