security: закрыть уязвимости аудита (PRJ-6)
- gunicorn вместо dev-сервера Werkzeug; non-root user в Dockerfile - volume sqlite_data для БД (заявки не теряются при rebuild) - consultations.db и data/ в .dockerignore (ПДн не попадают в образ) - Secure-куки по умолчанию (COOKIE_SECURE=1), лимит сессии 12ч - защитные заголовки: CSP, X-Frame-Options, nosniff, Referrer-Policy, Permissions-Policy - MAX_CONTENT_LENGTH 64КБ - анти-брутфорс админки: 5 попыток -> блокировка 15 мин + лимит 5/мин - обязательный чекбокс согласия на обработку ПДн + страница /privacy - .env.example: понятные плейсхолдеры, COOKIE_SECURE
This commit is contained in:
@@ -160,6 +160,7 @@
|
||||
</div>
|
||||
<fieldset class="format-field"><legend>Формат занятий <span>*</span></legend><div class="radio-options"><label><input type="radio" name="format" value="online" required><span>Онлайн</span></label><label><input type="radio" name="format" value="offline"><span>Очно</span></label><label><input type="radio" name="format" value="other"><span>Не знаю</span></label></div></fieldset>
|
||||
<label>Комментарий <span class="optional">необязательно</span><textarea name="message" rows="3" placeholder="Расскажите, какая цель у занятий..."></textarea></label>
|
||||
<label class="consent-label"><input type="checkbox" name="consent" value="on" required> <span>Я согласен на обработку персональных данных в соответствии с <a href="{{ url_for('privacy_policy') }}">политикой конфиденциальности</a>. <b>*</b></span></label>
|
||||
<button class="button button-primary form-button" type="submit">Отправить заявку <span>↗</span></button>
|
||||
<p class="form-note">Нажимая кнопку, вы соглашаетесь на обработку персональных данных.</p>
|
||||
</form>
|
||||
|
||||
Reference in New Issue
Block a user