feat: CSRF защита (double-submit cookie) — все мутирующие POST-роуты, login-форма
This commit is contained in:
@@ -148,6 +148,8 @@
|
||||
<form method="POST" action="/admin/limit/<%= c.id %>"
|
||||
style="display:flex;align-items:center;gap:.5rem;"
|
||||
onsubmit="return confirmLimit(this, '<%= c.name %>')">
|
||||
<%# CSRF-токен: одно значение на всю страницу (генерируется сервером) %>
|
||||
<input type="hidden" name="_csrf" value="<%= csrfToken %>">
|
||||
<input
|
||||
class="limit-input"
|
||||
type="number"
|
||||
|
||||
@@ -239,6 +239,8 @@
|
||||
// и использует clientId из токена — защита от подмены.
|
||||
%>
|
||||
<input type="hidden" name="company_id" value="<%= companyPk || '' %>">
|
||||
<%# CSRF-токен: защита от межсайтовой подделки запроса (double-submit cookie) %>
|
||||
<input type="hidden" name="_csrf" value="<%= csrfToken %>">
|
||||
<div class="form-grid">
|
||||
<div class="field">
|
||||
<label>IPv4 адрес или подсеть CIDR</label>
|
||||
@@ -308,6 +310,8 @@
|
||||
style="display:inline"
|
||||
onsubmit="return confirm('Удалить запись <%= e.value_cidr %>?')">
|
||||
<input type="hidden" name="company_id" value="<%= companyPk || '' %>">
|
||||
<%# CSRF-токен: одно значение на всю страницу, сгенерировано сервером %>
|
||||
<input type="hidden" name="_csrf" value="<%= csrfToken %>">
|
||||
<button class="btn btn-danger">Удалить</button>
|
||||
</form>
|
||||
</td>
|
||||
@@ -337,6 +341,8 @@
|
||||
<form method="POST" id="edit-form">
|
||||
<!-- Скрытые поля: action (action='/edit/N') и company_id заполняет openEditModal() -->
|
||||
<input type="hidden" id="edit-company-id" name="company_id" value="">
|
||||
<%# CSRF-токен: значение рендерится сервером один раз для всей страницы %>
|
||||
<input type="hidden" name="_csrf" value="<%= csrfToken %>">
|
||||
|
||||
<div class="field" style="margin-bottom:.75rem;">
|
||||
<label>IPv4 адрес или подсеть CIDR</label>
|
||||
|
||||
@@ -56,6 +56,8 @@
|
||||
<% if (error) { %><div class="error"><%= error %></div><% } %>
|
||||
|
||||
<form method="POST" action="/login">
|
||||
<%# CSRF-токен: защита от CSRF-атаки на форму входа %>
|
||||
<input type="hidden" name="_csrf" value="<%= csrfToken %>">
|
||||
<div class="field">
|
||||
<label>Пользователь</label>
|
||||
<select name="user">
|
||||
|
||||
Reference in New Issue
Block a user