STARTPOINT_DEV Telegram 137
Когда-нибудь замечали в 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.
🔥3



tgoop.com/startpoint_dev/137
Create:
Last Update:

Когда-нибудь замечали в 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.

BY Настя Котова // Frontend & Node.js


Share with your friend now:
tgoop.com/startpoint_dev/137

View MORE
Open in Telegram


Telegram News

Date: |

Channel login must contain 5-32 characters Ng, who had pleaded not guilty to all charges, had been detained for more than 20 months. His channel was said to have contained around 120 messages and photos that incited others to vandalise pro-government shops and commit criminal damage targeting police stations. Concise Telegram channels fall into two types: “Hey degen, are you stressed? Just let it all out,” he wrote, along with a link to join the group.
from us


Telegram Настя Котова // Frontend & Node.js
FROM American