Веб-технологии и безопасность
REST API vs JSON-RPC
- REST (REpresentational State Transfer): Ресурсо-ориентированная архитектура, использующая стандартные HTTP-методы (
GET,POST,PUT,DELETE). Не хранит состояние и задействует возможности HTTP, такие как кеширование. - JSON-RPC: Протокол, ориентированный на действия (вызов методов), а не на ресурсы. Как правило, использует
POSTдля всех запросов и содержит имя метода и параметры в теле запроса.
Группы HTTP-статусов
- 1xx: Информационные.
- 2xx: Успешные (например,
200 OK,201 Created,204 No Content). - 3xx: Перенаправление (например,
301 Moved Permanently,302 Found,304 Not Modified). - 4xx: Ошибка клиента (например,
400 Bad Request,401 Unauthorized,403 Forbidden,404 Not Found). - 5xx: Ошибка сервера (например,
500 Internal Server Error,502 Bad Gateway,503 Service Unavailable).
Безопасность (OWASP Top 10)
Распространённые веб-уязвимости и способы их предотвращения:
- Инъекции (например, SQL Injection): Предотвращаются использованием подготовленных выражений и параметризованных запросов.
- Нарушение аутентификации (Broken Authentication): Используйте многофакторную аутентификацию и надёжное хеширование паролей (например,
bcrypt,argon2). - Межсайтовый скриптинг (XSS): Предотвращается экранированием всего пользовательского контента перед отображением в браузере.
- Межсайтовая подделка запроса (CSRF): Предотвращается использованием уникальных CSRF-токенов для всех запросов, изменяющих состояние.
- CORS (Cross-Origin Resource Sharing): Механизм безопасности, позволяющий серверу указывать, каким другим источникам разрешён доступ к его ресурсам.
Аутентификация vs Авторизация
- Аутентификация: Проверка того, кто является пользователь (например, вход в систему).
- Авторизация: Проверка того, что пользователю разрешено делать (например, разрешения, роли).
JWT (JSON Web Tokens)
JWT — это компактный, URL-безопасный формат представления утверждений (claims) между двумя сторонами.
- Срок действия: JWT должны иметь claim
expдля истечения срока действия через определённое время. - Отзыв: Поскольку JWT не хранят состояние, отозвать их сложно. Распространённые стратегии:
- Короткий TTL: Используйте очень короткое время жизни токена.
- Refresh-токены: Используйте постоянный refresh-токен для выпуска новых JWT.
- Чёрный список (Deny-list): Храните список отозванных токенов в быстром хранилище вроде Redis.
- Ротация версий/ключей: Увеличивайте номер версии в объекте пользователя и включайте его в JWT; если они не совпадают — токен недействителен.