Skip to content

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Information Security Lab #1


Описание проекта

Данный проект представляет из себя веб-приложение, демонстрирующее современные практики веб-безопасности, реализуя с помощью Java/Spring:

  • JWT-аутентификация.
  • Валидация входных данных для предотвращения XSS атак.
  • ORM запросы для предотвращения использования SQL-инъекции.
  • Конфигурация на основе переменных окружения для безопасного развёртывания приложения.

Методы API

1. POST /auth/login -- Аутентификация пользователя

Описание: Метод принимает логин и пароль пользователя. В случае успешной аутентификации возвращает JWT-токен.

Request:

POST /auth/login

{
  "username": "user",
  "password": "password"
}

Response (JSON):

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5..."
}

Ошибки:

  • 403 Forbidden -- если логин/пароль неверны.

2. GET /api/data -- Получение списка треков

Описание: Возвращает список сущностей Tracks. Доступ только для аутентифицированных пользователей (с валидным JWT).

Request:

GET /api/data Authorization: Bearer

Response (JSON):

[
  {
    "id": 0,
    "name": "name",
    "author": "author",
    "numberOfPLays": 0,
  }
]

Ошибки:

  • 403 Forbidden -- если отсутствует или невалиден JWT.

3. POST /api/data -- Добавление нового трека

Описание: Добавляет новую сущность 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

Противодействие SQL Injection (SQLi)

  • Используется Spring Data JDBC, который применяет параметризованные запросы → данные подставляются безопасно, без конкатенации SQL-строк.
  • Таким образом, классические SQLi невозможны.

Противодействие XSS

  • REST API возвращает только JSON и не исполняет JavaScript.
  • Устанавливаются заголовки HTTP X-XSS-Protection: 1; mode=block и Content-Security-Policy: script-src 'self'

Реализация аутентификации

  • Используется JWT-токен, который подписывается секретным ключом.
  • Токен проверяется middleware (Spring Security OncePerRequestFilter).
  • Без токена доступ к защищённым эндпоинтам запрещён.

Скриншот отчета OWASP

Результат SpotBugs

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages