【问题标题】:How to generate a nonce in node.js?如何在 node.js 中生成随机数?
【发布时间】:2018-10-08 17:25:11
【问题描述】:

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

<script nonce="{{{nonce}}}" src="http://example.com/file.js">

我知道 nonce 必须是唯一的,其计算方法几乎无法预测,它应该至少有 128 位(因此是 16 个字节),并以 base64 编码。因此这对node.js 是否正确?

const crypto = require('crypto');
let nonce = crypto.randomBytes(16).toString('base64');

【问题讨论】:

    标签: node.js content-security-policy nonce


    【解决方案1】:

    只是为了确认这确实在 NodeJS 中用于 CSP 随机数

    const crypto = require('crypto');
    let nonce = crypto.randomBytes(16).toString('base64');
    

    【讨论】:

    • .toString('hex') 十六进制。
    【解决方案2】:

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

    每个 uuid 正好是 16 字节(128 位),与产生 uuid 碰撞相比,您的计算机被流星击中的可能性更高。

    【讨论】:

    • 为什么不呢? uuid 遵守 CSP3 spec生成的值应至少为 128 位长(编码前),并且应通过加密安全的随机数生成器生成,以确保该值不易被攻击者预测。uuid 满足允许的字符要求:base64-value = 1*( ALPHA / DIGIT / "+" / "/" / "-" / "_" )*2( "=" )
    • 是否有使用 uuid 生成十六进制的选项?
    猜你喜欢
    • 1970-01-01
    • 2018-07-28
    • 2010-11-14
    • 2016-12-11
    • 2012-11-06
    • 2011-09-15
    • 2012-07-25
    • 2014-07-23
    • 2019-01-14
    相关资源
    最近更新 更多