# Промпт для Claude Opus 4 — XSS, CSRF, безопасность index.ejs ## Контекст (не анализируй) Node.js + Express + EJS. Шаблон серверного рендеринга. Данные приходят из БД (email пользователя, CIDR, комментарий) и из query-параметров (error, message). EJS по умолчанию экранирует `<%= ... %>`, НО не экранирует `<%- ... %>`. В этом шаблоне `<%-` не используется. ## Что нужно Ниже полный `index.ejs`. Найди: - XSS-векторы (экранирование, query-параметры в URL) - CSRF (нет токена в формах) - Clickjacking (отсутствие X-Frame-Options / CSP frame-ancestors) - Утечка данных (видны ли clientId/email других компаний?) - Client-side валидация (отсутствует, хотя ТЗ требует) - Проблемы с disabled-полями (можно ли обойти через DevTools?) Ограничения: - Не предлагай менять стек/фреймворк - Только конкретные строки с исправлениями - ВЕСЬ ОТВЕТ ОДНИМ БЛОКОМ — без свёрток, без интерактивных элементов, чистый текст ```html Белые списки IP — Nubes
... | Белые списки IP
<% if (message) { %>
<%= message %>
<% } %> <% if (error) { %>
<%= error %>
<% } %>
<%= used %> / <%= limit %>
записей
<%= user.clientId %>
компания
<%= user.email %>
пользователь
Добавить адрес
= limit ? 'disabled' : '' %>>
Доверенные адреса
<% if (entries.length === 0) { %>
Нет добавленных адресов
<% } else { %>
<% entries.forEach(e => { %> <% }) %>
Адрес / Подсеть Комментарий Добавил Дата Действие
<%= e.value_cidr %> <%= e.comment || '—' %> <%= e.created_by %> <%= new Date(e.created_at).toLocaleDateString('ru', {day:'numeric',month:'short',year:'numeric',hour:'2-digit',minute:'2-digit'}) %>
<% } %>
```