Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chromium不接受CSP脚本src SHA-256哈希_Javascript_Html_Content Security Policy - Fatal编程技术网

Javascript Chromium不接受CSP脚本src SHA-256哈希

Javascript Chromium不接受CSP脚本src SHA-256哈希,javascript,html,content-security-policy,Javascript,Html,Content Security Policy,我将Chromium版本89.0.4389.90用于以下简单的HTML代码段 测试CSP 函数测试(){alert('Hello');} 点击我 使用以下内容创建Base64编码哈希: $echo-n'函数测试(){alert('Hello');}'| openssl sha256-binary | openssl base64 OteiSfjK+c1oxlotc4j4bjn8pdo6n4nwk8urvtm6ys= 加载时,Chromium控制台会打印 Refused to execute

我将Chromium版本89.0.4389.90用于以下简单的HTML代码段


测试CSP
函数测试(){alert('Hello');}
点击我
使用以下内容创建Base64编码哈希:

$echo-n'函数测试(){alert('Hello');}'| openssl sha256-binary | openssl base64
OteiSfjK+c1oxlotc4j4bjn8pdo6n4nwk8urvtm6ys=
加载时,Chromium控制台会打印

Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'sha256-OteiSfjK+c1oXLotC4Jj4bJn8pdo6N4nWk8uRVTM6ys='".
Either the 'unsafe-inline' keyword, a hash ('sha256-r+abGbElv1ENxT5+LrplDxvxZl4w3iy17u48CbdgB8g='), or a nonce ('nonce-...') is required to enable inline execution.
如果单击该按钮,将打印另一条错误消息:

Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'sha256-OteiSfjK+c1oXLotC4Jj4bJn8pdo6N4nWk8uRVTM6ys='".
Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
当我用
r+abGbElv1ENxT5+LrplDxvxZl4w3iy17u48CbdgB8g=
替换
OteiSfjK+c1oXLotC4Jj4bJn8pdo6N4nWk8uRVTM6ys=
时(如错误消息中所建议的),页面加载上没有任何错误消息,但当我单击按钮时错误仍然存在(并且脚本未执行)

我的问题是:

  • 出什么事了
  • Chromium使用了哪些数据来计算建议的Base64编码SHA-256散列,
    r+abGbElv1ENxT5+LrplDxvxZl4w3iy17u48CbdgB8g=

  • 我不确定散列
    OteiSfjK+c1oxlotc4j4bjn8pdo6n4nwk8urvtm6ys=
    来自哪里

    要验证Chromium输出的内容,请使用在线工具手动生成Base64输出(并在C#中再次验证):

    这和Chromium说的完全相符。我猜您使用的方法存在编码/哈希问题

    错误哈希是如何产生的

    您已经获得了OteiSfjK+c1oxlotc4j4bjn8pdo6n4nwk8urvtm6ys=的Base64输出

    这是从此文本生成的SHA-256哈希:

    function test() { alert(Hello); }
    
    注意
    Hello
    周围缺少的引号@connexo对这个问题的评论提供了一条缺失的线索,以找出产生错误哈希的原因

    复制错误哈希的步骤(在
    Hello
    周围缺少引号):


    我不确定散列
    OteiSfjK+c1oxlotc4j4bjn8pdo6n4nwk8urvtm6ys=
    来自哪里

    要验证Chromium输出的内容,请使用在线工具手动生成Base64输出(并在C#中再次验证):

    这和Chromium说的完全相符。我猜您使用的方法存在编码/哈希问题

    错误哈希是如何产生的

    您已经获得了OteiSfjK+c1oxlotc4j4bjn8pdo6n4nwk8urvtm6ys=的Base64输出

    这是从此文本生成的SHA-256哈希:

    function test() { alert(Hello); }
    
    注意
    Hello
    周围缺少的引号@connexo对这个问题的评论提供了一条缺失的线索,以找出产生错误哈希的原因

    复制错误哈希的步骤(在
    Hello
    周围缺少引号):


    问题在于
    -二进制
    开关。您正在散列文本,而不是二进制数据。另外,
    echo-n'函数测试(){alert('Hello');}
    中似乎存在引号中的引号问题,需要使用
    -binary
    选项来确保正确的数据通过管道传输到openssl base64命令。我对文本中的引号有问题。当使用
    echo-n“function test(){alert('Hello');}”| openssl sha256-binary | openssl base64
    时,结果是
    r+abGbElv1ENxT5+LrplDxvxZl4w3iy17u48CbdgB8g=
    。问题2已解决。问题将是
    -binary
    开关。您正在散列文本,而不是二进制数据。另外,
    echo-n'函数测试(){alert('Hello');}
    中似乎存在引号中的引号问题,需要使用
    -binary
    选项来确保正确的数据通过管道传输到openssl base64命令。我对文本中的引号有问题。当使用
    echo-n“function test(){alert('Hello');}”| openssl sha256-binary | openssl base64
    时,结果是
    r+abGbElv1ENxT5+LrplDxvxZl4w3iy17u48CbdgB8g=
    。问题2已经解决。请详细说明你的散列方法。@connexo任何使用SHA256散列的在线网站都会产生我指出的散列。在C#中也进行了测试,C#产生相同的散列。你的评论是什么意思?我只是想确保你的回答对OP和未来的访客都是可复制的。“由于创建哈希的方法似乎是问题的根源,这很重要。@connexo在其他新闻中,您对OP的问题的评论允许由于缺少引号而复制错误的哈希。我已经更新了答案来显示这个OK,不匹配的base64哈希是由命令中的错误引号引起的(另请参见对问题的评论)。但是当使用正确的散列时,chromium不接受按钮单击。。。为什么?请详细说明你的散列方法。@connexo任何使用SHA256散列的在线网站都会产生我所指出的散列。在C#中也进行了测试,C#产生相同的散列。你的评论是什么意思?我只是想确保你的回答对OP和未来的访客都是可复制的。“由于创建哈希的方法似乎是问题的根源,这很重要。@connexo在其他新闻中,您对OP的问题的评论允许由于缺少引号而复制错误的哈希。我已经更新了答案来显示这个OK,不匹配的base64哈希是由命令中的错误引号引起的(另请参见对问题的评论)。但是当使用正确的散列时,chromium不接受按钮单击。。。为什么?
    SHA256: function test() { alert(Hello); }
          = 3ad7a249f8caf9cd685cba2d0b8263e1b267f29768e8de275a4f2e4554cceb2b
    Base64: 3ad7a249f8caf9cd685cba2d0b8263e1b267f29768e8de275a4f2e4554cceb2b
          = OteiSfjK+c1oXLotC4Jj4bJn8pdo6N4nWk8uRVTM6ys=