OWASP Браузерные уязвимости
XSS (Cross-Site Scripting)
XSS атаки — это атаки, при которых злоумышленник вставляет вредоносный JavaScript-код в веб-страницу, с целью выполнения этого кода в браузере жертвы. Эта уязвимость может привести к краже сессий, личных данных или выполнению произвольных действий от имени пользователя.
Пример атаки xss атаки
Злоумышленник создаёт ссылку с вредоносным JavaScript, отправляет её жертве по email. Когда жертва нажимает на ссылку, код JS выполняется в её браузере, что позволяет украсть учётные данные, сессии или выполнить другие вредоносные действия.
Способы защиты от XSS атаки
- Content Security Policy (CSP): Создайте список разрешённых источников контента, ограничив загрузку только с доверенных доменов.
- Не использовать
eval()
иdangerouslySetInnerHTML
: Эти методы позволяют выполнять произвольный код, что открывает уязвимости. - HttpOnly cookies: Устанавливайте cookies с атрибутом
HttpOnly
, чтобы предотвратить доступ к куки через JavaScript. - Санитизация ввода: Очистка входных данных от вредоносных скриптов с помощью экранирования, чтобы предотвратить их выполнение.
Виды XSS
- Сохраняемый XSS: Вредоносный код сохраняется в базе данных и выполняется на странице при последующем запросе.
- Отражённый XSS: Скрипт не сохраняется, а передается через URL или параметры запроса. Когда сервер возвращает страницу с этим скриптом, он выполняется в браузере жертвы.
- XSS на основе DOM: Вредоносный скрипт внедряется в клиентский JavaScript код через уязвимости DOM, без изменений на сервере.
CSRF (Cross-Site Request Forgery)
CSRF — это атака, при которой злоумышленник заставляет пользователя выполнить нежелательный запрос от его имени. Это возможно, потому что браузер автоматически отправляет куки и другие аутентификационные данные при запросах, даже если запрос был инициирован внешним источником.
Способы защиты от CSRF атаки
- Использование CSRF токенов: Генерация уникального токена для каждого сеанса пользователя. Этот токен должен быть включён в форму или запрос и проверяться сервером.
- Использование HTTPS: Защищённые соединения предотвращают перехват и модификацию данных.
- SameSite Cookies: Установите атрибут
SameSite
для cookies, чтобы предотвратить их отправку с кросс-доменных запросов.
Использование устаревших (deprecated) npm пакетов
Использование устаревших или не поддерживаемых пакетов в npm может привести к уязвимостям в вашем приложении, так как такие пакеты могут содержать известные ошибки или уязвимости. Например, старые версии пакетов могут не иметь обновлений безопасности.
Способы защиты
- Регулярно обновляйте пакеты и зависимости.
- Используйте инструменты, такие как npm audit для проверки пакетов на наличие уязвимостей.
- Предпочитайте использовать поддерживаемые и активно обновляемые пакеты.
Инъекции SQL/NOSQL
SQL инъекции — это атака, при которой злоумышленник вставляет или изменяет SQL-запросы с целью получения доступа к данным, модификации их или выполнения произвольных действий с базой данных.
NOSQL инъекции — похожие атаки, но для баз данных NoSQL, например, MongoDB.
Способы защиты от SQL/NOSQL инъекции:
- Использование подготовленных запросов (prepared statements): Эти запросы обеспечивают безопасное взаимодействие с базой данных и предотвращают инъекции.
- Санитизация ввода: Все данные, полученные от пользователей, должны быть проверены и очищены.
- ORM (Object-Relational Mapping): Использование ORM-фреймворков, которые автоматически защищают от инъекций.
Man-in-the-Middle (MITM)
Атака MITM заключается в перехвате, подмене или прослушивании трафика между клиентом и сервером. Злоумышленник может получить доступ к конфиденциальной информации или изменить данные в процессе передачи.
Способы защиты от MITM:
- Использование HTTPS: HTTPS защищает данные с помощью TLS, что делает данные недоступными для перехвата или модификации.
- SSL/TLS сертификаты: Убедитесь, что используете действующие сертификаты для установления защищённых соединений.
- HSTS (HTTP Strict Transport Security): Этот механизм принудительно заставляет браузеры использовать только HTTPS для доступа к вашему сайту.
Clickjacking - Атака на подмену кликов
Clickjacking — это атака, при которой злоумышленник накладывает скрытые элементы интерфейса на видимые, заставляя пользователя взаимодействовать с ними, не осознавая этого. Это может привести к выполнению нежелательных действий (например, нажатие кнопки "подтвердить оплату").
Способы защиты от Clickjacking:
- X-Frame-Options: Установите заголовок
X-Frame-Options
на значениеDENY
илиSAMEORIGIN
, чтобы предотвратить встраивание вашего сайта в iframe. - Content-Security-Policy (CSP): Используйте CSP для ограничения источников контента и предотвращения встраивания в фреймы.
- Реализация защиты от кликов: Используйте механизмы, такие как challenge-response, для защиты от несанкционированных действий.