Данный проект представляет из себя веб-приложение, демонстрирующее современные практики веб-безопасности, реализуя с помощью Java/Spring:
- JWT-аутентификация.
- Валидация входных данных для предотвращения XSS атак.
- ORM запросы для предотвращения использования SQL-инъекции.
- Конфигурация на основе переменных окружения для безопасного развёртывания приложения.
Описание: Метод принимает логин и пароль пользователя. В случае успешной аутентификации возвращает JWT-токен.
Request:
POST /auth/login
{
"username": "user",
"password": "password"
}
Response (JSON):
{
"token": "eyJhbGciOiJIUzI1NiIsInR5..."
}
Ошибки:
- 403 Forbidden -- если логин/пароль неверны.
Описание: Возвращает список сущностей Tracks. Доступ только для аутентифицированных пользователей (с валидным JWT).
Request:
GET /api/data Authorization: Bearer
Response (JSON):
[
{
"id": 0,
"name": "name",
"author": "author",
"numberOfPLays": 0,
}
]
Ошибки:
- 403 Forbidden -- если отсутствует или невалиден JWT.
Описание: Добавляет новую сущность Track в список. Доступ только для аутентифицированных пользователей.
Request:
POST /api/data Authorization: Bearer
{
"name": "name",
"author": "author",
"numberOfPlays": 0
}
Response:
OK
Ошибки:
- 400 Bad Request -- если данные невалидны.
- 403 Forbidden -- если отсутствует или невалиден JWT.
API использует JWT-токены для защиты эндпоинтов.
- Пользователь проходит аутентификацию через POST /auth/login.
- В ответ получает accessToken (JWT).
- Для доступа к защищённым эндпоинтам необходимо передавать токен в заголовке:
Authorization: Bearer
- Используется Spring Data JDBC, который применяет параметризованные запросы → данные подставляются безопасно, без конкатенации SQL-строк.
- Таким образом, классические SQLi невозможны.
- REST API возвращает только JSON и не исполняет JavaScript.
- Устанавливаются заголовки HTTP X-XSS-Protection: 1; mode=block и Content-Security-Policy: script-src 'self'
- Используется JWT-токен, который подписывается секретным ключом.
- Токен проверяется middleware (Spring Security OncePerRequestFilter).
- Без токена доступ к защищённым эндпоинтам запрещён.