CSP 不接受内联脚本哈希或随机数

Noa*_*ltz 5 python hashcode inline-scripting flask content-security-policy

我正在开发一个 Flask 应用程序,它使用 Flask-Talisman 来合并 CSP。我想在我的模板之一中创建一个内联脚本,而不是将“unsafe-inline”添加到 CSP 的“script-src”数组中(这可能对 XSS 攻击有害),我想使用哈希或允许脚本运行的随机数。我复制了 Opera 开发工具中控制台错误消息中给出的哈希值,并将其放入 CSP 的“script-src”数组中(在init .py 文件中)。但是,由于某种原因,CSP 不会接受哈希值,我不知道如何修复它。我也用随机数尝试过,也出现了同样的问题。这是控制台输出(出于安全原因我删除了哈希值):

The source list for Content Security Policy directive 'script-src' contains an invalid source: 'sha256-(hash goes here)'. 
It will be ignored.
Run Code Online (Sandbox Code Playgroud)

这是init .py中的 CSP :

csp = {
    "default-src": [
        "'self'",
        'https://www.youtube.com',
        'https://img.youtube.com'
    ],
    'script-src': [ 'sha256-(hash goes here)',
                    'https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js',
                    'https://code.jquery.com/jquery-3.3.1.slim.min.js',
                    'https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js'],
    'style-src': ["'self'",'https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css']
}
Run Code Online (Sandbox Code Playgroud)

Bar*_*ard 2

Ahash和 anonce需要用引号引起来,因此您应该将其替换为:

'script-src': [ 'sha256-(hash goes here)',
Run Code Online (Sandbox Code Playgroud)

有了这个:

'script-src': [ "'sha256-(hash goes here)'",
Run Code Online (Sandbox Code Playgroud)

类似于您的包含方式'self'

另请注意,flask-talisman 具有nonce内置支持,因此不需要手动指定。它将自动添加。请参阅此示例:https ://github.com/GoogleCloudPlatform/flask-talisman#example-6