10 вопросов
Безопасность веб-приложений на Go: криптография (crypto/rand, bcrypt), защита от SQL-инъекций, JWT-токены, TLS/HTTPS, CORS, CSRF, XSS, rate limiting и управление секретами.
math/rand детерминирован: при одном seed выдает одну и ту же последовательность, поэтому предсказуем для злоумышленника.
Подробнее →Секреты не должны попадать в код и репозиторий; переменные окружения и секрет-менеджеры позволяют задавать их при запуске.
Подробнее →bcrypt настраиваемо медленный и с солью; SHA256 слишком быстрый и без встроенной соли, что упрощает перебор.
Подробнее →Параметризованные запросы передают данные отдельно от текста запроса, поэтому они не могут изменить его структуру.
Подробнее →JWT: Header.Payload.Signature. Проверяют подпись (HMAC или ключ для RSA) и при необходимости поля exp, iss в payload.
Подробнее →ListenAndServeTLS(addr, certFile, keyFile, handler) запускает сервер с TLS, используя указанные файлы сертификата и приватного ключа.
Подробнее →CORS - политика браузера: по умолчанию скрипт с одного домена не может читать ответы запросов на другой домен; сервер явно разрешает это заголовками.
Подробнее →CSRF - запрос от имени пользователя с чужого сайта; защита - непредсказуемый токен в форме и проверка Origin/Referer.
Подробнее →Rate limiting ограничивает число запросов в единицу времени по клиенту (IP, ключ), защищая от DDoS и злоупотреблений.
Подробнее →html/template при подстановке {{.}} по умолчанию экранирует вывод в зависимости от контекста (HTML, атрибут, JS).
Подробнее →