Javascript Chromium不接受CSP脚本src SHA-256哈希
我将Chromium版本89.0.4389.90用于以下简单的HTML代码段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
测试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=
时(如错误消息中所建议的),页面加载上没有任何错误消息,但当我单击按钮时错误仍然存在(并且脚本未执行)
我的问题是:
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=