[Security] Требовать HTTPS для REDMINE_URL или предупреждать при HTTP #54

Closed
opened 2026-07-12 21:18:12 +07:00 by artem.kokos · 0 comments
Owner

Проблема

redmine_reporter/client.py:52-53 монтирует retry-адаптер одновременно на http:// и https://, а Config.validate() не проверяет схему REDMINE_URL.

Если пользователь случайно или намеренно укажет:

REDMINE_URL=http://red.eltex.loc

то API-ключ (REDMINE_API_KEY) или пароль (REDMINE_USER/REDMINE_PASSWORD) будут переданы по незашифрованному каналу.

Пример

from redmine_reporter.config import Config
Config.validate()  # REDMINE_URL=http://red.eltex.loc проходит без предупреждения

Рекомендации

  1. Строгий вариант (рекомендуется): в Config.validate() выбрасывать ValueError, если URL не начинается с https://:

    url = cls.get_redmine_url()
    if not urllib.parse.urlparse(url).scheme == "https":
        raise ValueError("REDMINE_URL must use HTTPS")
    
  2. Мягкий вариант: при http:// печатать предупреждение в stderr и продолжать.

  3. Убрать монтирование адаптера на http:// в client.py, если он не нужен.

Связанные места

  • redmine_reporter/client.py:52-53
  • redmine_reporter/config.py
## Проблема `redmine_reporter/client.py:52-53` монтирует retry-адаптер одновременно на `http://` и `https://`, а `Config.validate()` не проверяет схему `REDMINE_URL`. Если пользователь случайно или намеренно укажет: ```env REDMINE_URL=http://red.eltex.loc ``` то API-ключ (`REDMINE_API_KEY`) или пароль (`REDMINE_USER`/`REDMINE_PASSWORD`) будут переданы по незашифрованному каналу. ## Пример ```python from redmine_reporter.config import Config Config.validate() # REDMINE_URL=http://red.eltex.loc проходит без предупреждения ``` ## Рекомендации 1. **Строгий вариант (рекомендуется):** в `Config.validate()` выбрасывать `ValueError`, если URL не начинается с `https://`: ```python url = cls.get_redmine_url() if not urllib.parse.urlparse(url).scheme == "https": raise ValueError("REDMINE_URL must use HTTPS") ``` 2. **Мягкий вариант:** при `http://` печатать предупреждение в `stderr` и продолжать. 3. Убрать монтирование адаптера на `http://` в `client.py`, если он не нужен. ## Связанные места - `redmine_reporter/client.py:52-53` - `redmine_reporter/config.py`
artem.kokos added the configsecurity labels 2026-07-12 21:18:12 +07:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: artem.kokos/redmine-reporter#54