【发布时间】:2020-11-20 12:29:35
【问题描述】:
我是一名运营人员,正在建立一个需要实施安全标头的网站。
我创建了一个 Lambda@Edge 函数,其中包含我需要的标题,它工作正常,但我想为 style-src 添加一个随机数,因为我们正在调用外部 URL(谷歌字体等)。我发现的大多数指南都只使用“自我”而不是其他 URL。在 SO 上还有一个关于此的其他问题,但响应不起作用,因为我使用的是 Origin Request 而不是 Origin Response。
我可以将它添加到 Lambda@Edge 函数吗?我有一些生成随机数的 nodejs 代码,但是当我尝试将它添加到 style-src 部分时,它会忽略它。我不懂 JS,所以这对我来说很难解决。
如果这不是正确/最佳方式,我愿意接受任何将 nonce 与 CSP 和 Lambda@Edge 一起使用的方法。
这是我的 Lambda@Edge 代码。
'use strict';
exports.handler = (event, context, callback) => {
//Get contents of response
const response = event.Records[0].cf.response;
const headers = response.headers;
//Set new headers
headers['strict-transport-security'] = [{key: 'Strict-Transport-Security', value: 'max-age=63072000; includeSubdomains; preload'}];
headers['content-security-policy'] = [{key: 'Content-Security-Policy', value: "default-src 'self'; frame-ancestors 'none'; connect-src https://dev.example.io https://api.exampleapi.io; img-src 'self' data: https://examplebucket.s3.region.amazonaws.com; script-src 'self'; font-src 'self' https://fonts.example.com; style-src 'self' https://fonts.example.com; object-src 'none'"}];
headers['x-content-type-options'] = [{key: 'X-Content-Type-Options', value: 'nosniff'}];
headers['x-frame-options'] = [{key: 'X-Frame-Options', value: 'DENY'}];
headers['x-xss-protection'] = [{key: 'X-XSS-Protection', value: '1; mode=block'}];
headers['referrer-policy'] = [{key: 'Referrer-Policy', value: 'same-origin'}];
//Return modified response
callback(null, response);
};
这是我用来生成 nonce 的代码,可以在本地工作。
const crypto = require('crypto');
let nonce = crypto.randomBytes(16).toString('hex');
【问题讨论】:
标签: javascript amazon-web-services amazon-cloudfront content-security-policy nonce