Node.js Recipes
3.23K subscribers
174 photos
7 videos
1 file
622 links
По буднях нотатки по #Nodejs розробці, по вихідним огляди конференцій та доповідей (с) @galkin_nikita
Download Telegram
6 способов взломать твое JavaScript приложение. Виктор Турский
#worth_seeing #security

В докладе:
- Использование SMS для восстановления пароля
- Загрузка аватарки в файловую систему, а не S3
- Раздача статики средствами #nodejs
- Использование MongoDB
- Server Rendering
- XSS

Во всех примерах, безопасный на первый взгляд код превращается в серьезную проблему в безопасности.
Что такое timing attack (атака по времени)?
#security #package

TL;DR Не используйте сравнение строк через === при проверке равенства секретов или токенов. Используйте безопасные сравнение с фиксированным временем – secure-compare

В веб-разработке мы часто не задумываемся об классической атаке на систему через анализ времени ответа. Исследование 2009 года показывает, что злоумышленник может измерять события с точностью 15–100ms в Интернете и с точностью 0.1ms в локальной сети.

Пример кода уязвимого к данной атаке:
function isAuthenticated(user, token) {
var correctToken = FetchUserTokenFromDB(user);
return token === correctToken;
}

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

Безопасное по времени сравнение выглядит так:
let mismatch = 0;
for (var i = 0; i < a.length; ++i) {
mismatch |= (a.charCodeAt(i) ^ b.charCodeAt(i));
}
return mismatch;

Его можно использовать из пакета secure-compare.

Мне доводилось участвовать в спорах, где оппоненты говорили, что тут нет риска, так как задержка на запрос в базу данных и/или latency ответа не дадут злоумышленнику достаточно информации. Аргументы здравые. Вместо того, чтобы с ними спорить я задаю вопросы:
- есть ли в драйвере кэш запросов? Как он работает?
- Откуда злоумышленник проводить атаку из внешней или внутренней сети?
- Насколько большие затраты делать безопасное сравнение в сравнение с закрываемыми рисками?
Audio
#voice_chat #security

Гость: Анастасия Войтова, секурити инженер в cossacklabs.com. Занимается безопасностью и защитой данных.

Топ 5 security проблем типичного веб-проекта
Управление рисками и угрозами – как понять, какие штуки по безопасности нужны в твоем проекте, а какие нет
SSDLC, SAMM — какие тулы/подходы на каждом этапе разработке софта
Где и как учить основы security? Углублено?
Как выглядит найм security engineer? Карьеры
Что в облаках сделано хорошо для обеспечение security, а что необходимо реализовывать самостоятельно?

Ссылки от Анастасии:
- Личный блог
- Корпоративный блог
- Об интернатуре

OWASP cсылки:
- https://owasp.org/www-project-top-ten/
- https://github.com/OWASP/ASVS
- https://owaspsamm.org/model/
Как автоматизировать 2FA?
#package #security

Данный рецепт не о том, как реализовать в своем приложение 2FA (Two-factor authentication). Для этого существуют готовые сервисы, о которых я рассказывал на React fwdays’21. Сегодня кейс из сотрудничества с QA автоматизаторами.

Для проверки приложения необходимо произвести логин пользователя. Это происходит через gmail. Переодически gmail говорит необходима дополнительная проверка – неизвестное устройство. Варианты решения отправка смс или отправка емейл не подходят, так как требуют дождаться этих смс/емейлов, способа их получения, парсинга и т.п.

В данном кейсе правильно использовать google authenticator. Данный 2FA способ виден, только если вы добавили номер телефона. В момент настройке будет показан QR code, который содержит текст вида:
otpauth://totp/Google:<EMAIL>?secret=<SECRET>&issuer=Google
Для того, чтобы генерировать token валидные 30 секунд вам достаточно знания secret. В этом поможет пакет otplib. Пакет позволяет генерировать и проверять не только для authenticator, но One Time Passwords, но как я уже говорил, для этого лучше использовать готовые решения.
Где посмотреть лучшие практики по безопасности?
#security #list

Лучшие практики безопасности веб-проектов описаны в OWASP cheat sheets. OWASP расшифровывается как Open Web Application Security Project. Вот топ-5 для #nodejs разработчиков:
🔗 NodeJS security cheat sheet
🔗 REST Security Cheat Sheet
🔗 npm Security best practices
🔗 Node.js Docker Cheatsheet
🔗 Microservices Security Cheat Sheet