如何在node.js中生成一个nonce?

Joã*_*ira 10 node.js nonce content-security-policy

我需要生成一个nonce(仅生成一次的数字)来删除CSP规则'unsafe-inline'和脚本的所有可信URL,从而提高CSP分数.因此我需要在HTML中

<script nonce="{{{nonce}}}" src="http://example.com/file.js">
Run Code Online (Sandbox Code Playgroud)

我知道nonce必须是唯一的,计算方法几乎不可能预测,它应该至少有128位(因此是16字节),并在base64中编码.因此这是正确的node.js吗?

const crypto = require('crypto');
let nonce = crypto.randomBytes(16).toString('base64');
Run Code Online (Sandbox Code Playgroud)

Joã*_*ira 12

只是为了确认这确实在NodeJS中用于CSP nonce

const crypto = require('crypto');
let nonce = crypto.randomBytes(16).toString('base64');
Run Code Online (Sandbox Code Playgroud)

  • `.toString('hex')` 表示十六进制。 (5认同)

Mit*_*dge 6

我建议uuid为此使用: https: //www.npmjs.com/package/uuid

每个 uuid 恰好是所需的 16 字节(128 位),并且您的计算机被流星击中的可能性比生成 uuid 碰撞的可能性更高。