TGViewer
Настя Котова // Frontend & Node.js Настя Котова // Frontend & Node.js @startpoint_dev · 1.41K subscribers
Post #137 620
Когда-нибудь замечали в HTML что-то вроде <script nonce="abc123">?

Nonce – это одноразовый токен, который помогает защитить сайт от XSS-атак. Когда на сайте используется механизм CSP (Content Security Policy), браузер по умолчанию блокирует все inline-скрипты. Но если очень хочется использовать их, можно, вместо указания директивы unsafe-inline (которая будет разрешать любые такие скрипты), добавить nonce, который заранее прописан в заголовках ответа сервера. Тогда браузер выполнит только те скрипты, у которых этот токен правильный.

Пример CSP-заголовка:

Content-Security-Policy: script-src 'nonce-abc123'


Теперь в коде можно использовать:

<script nonce="abc123">console.log('Безопасный JS');</script>
<script nonce="efg567">console.log('Будет заблокирован');</script>


Обычно nonce создаётся для каждого запроса отдельно и передаётся в шаблон, чтобы его можно было подставить в скрипты.

Пример для Express:

app.use((req, res, next) => {
// Генерируем nonce
res.nonce = crypto.randomBytes(16).toString('base64');
// Устанавливаем CSP-заголовок
res.setHeader('Content-Security-Policy', `script-src 'nonce-${res.nonce}'`);
next();
});

app.get('/', (req, res) => {
res.send(`
<html>
...
<script nonce="${res.nonce}">
console.log('Этот скрипт выполнится');
</script>
</html>
`);
});


Теперь каждый запрос получает новый nonce, который передаётся в CSP-заголовке и также вставляется в HTML. Это позволяет безопасно использовать inline-скрипты, не открывая сайт для XSS.
  • 🔥 4
More from @startpoint_dev
  1. Sep 21, 2026Я к вам с новым анонсом. Этот год я заканчиваю выступлением на HolyJS! Конференция пройдёт…
  2. Sep 14, 2026В прошлый раз разбирали, зачем нужны using и await using и где они работают. Теперь посмот…
  3. Sep 7, 2026В JavaScript регулярно появляются новые возможности, и не про все из них мы вообще узнаём.…
  4. Aug 31, 2026В цикле про рендеринг мы разбирали конвейер: стили, лейаут, отрисовка, композитинг. Всё эт…
  5. Aug 24, 2026Весной мы обсуждали работу с сырыми данными: ArrayBuffer, Buffer в Node.js, SharedArrayBuf…
  6. Aug 17, 2026Когда я готовила материал для цикла про Next.js, то неожиданно для себя узнала, что в нём…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →