Php Bigcommerce-无法验证加载回调
各位开发者好 我面临着加载回调(以及扩展的卸载回调)的问题。Php Bigcommerce-无法验证加载回调,php,bigcommerce,Php,Bigcommerce,各位开发者好 我面临着加载回调(以及扩展的卸载回调)的问题。 我试图按照文档中描述的算法验证请求的真实性 我能够解码json字符串,数据是正确的,但签名永远不匹配。我确保使用正确的客户端密码,并尝试了不同的编码/解码方案,但没有成功 另一个关注点是它们在示例(以及它们的示例)中提供的代码片段(PHP)。当签名匹配时,它们似乎返回null,而当它们不匹配时,则返回解码数据…() 这意味着每次安全测试都会通过,因为在我所有的尝试中,签名都不匹配 我是不是遗漏了什么 编辑:以下是文档中的示例。我真的不
我试图按照文档中描述的算法验证请求的真实性 我能够解码json字符串,数据是正确的,但签名永远不匹配。我确保使用正确的客户端密码,并尝试了不同的编码/解码方案,但没有成功 另一个关注点是它们在示例(以及它们的示例)中提供的代码片段(PHP)。当签名匹配时,它们似乎返回null,而当它们不匹配时,则返回解码数据…()
这意味着每次安全测试都会通过,因为在我所有的尝试中,签名都不匹配 我是不是遗漏了什么 编辑:以下是文档中的示例。我真的不能给你样本数据,因为客户的秘密是保持秘密
function verify($signedRequest, $clientSecret)
{
list($payload, $encodedSignature) = explode('.', $signedRequest, 2);
// decode the data
$signature = base64_decode($encodedSignature);
$data = json_decode(base64_decode($payload), true);
// confirm the signature
$expectedSignature = hash_hmac('sha256', $payload, $clientSecret, $raw = true);
if (secureCompare($signature, $expectedSignature)) {
error_log('Bad Signed JSON signature!');
return null;
}
return $data;
}
function secureCompare($str1, $str2)
{
$res = $str1 ^ $str2;
$ret = strlen($str1) ^ strlen($str2); //not the same length, then fail ($ret != 0)
for($i = strlen($res) - 1; $i >= 0; $i--) {
$ret += ord($res[$i]);
}
return !$ret;
}
您没有遗漏任何内容,也不是时钟同步问题-28行示例代码提供了这两个方面,并且有一些非常关键的缺陷:
hash_hmac
。(BigCommerceAPI提供给您的散列实际上是base64-解码的JSON的散列)$raw=true
调用hash_hmac
,这意味着这两个字符串将始终有很大的不同:一个是原始二进制,另一个是十六进制secureCompare
逻辑检查错误。verify
函数的if(secureCompare…
部分要求与secureCompare
函数的行为相反。如果secureCompare函数在字符串匹配时返回true,我们为什么调用error\u log
verify
功能的正确实现:
<?php
function verifySignedRequest($signedRequest, $clientSecret)
{
list($encodedData, $encodedSignature) = explode('.', $signedRequest, 2);
// decode the data
$signature = base64_decode($encodedSignature);
$jsonStr = base64_decode($encodedData);
$data = json_decode($jsonStr, true);
// confirm the signature
$expectedSignature = hash_hmac('sha256', $jsonStr, $clientSecret, $raw = false);
if (!hash_equals($expectedSignature, $signature)) {
error_log('Bad signed request from BigCommerce!');
return null;
}
return $data;
}
请添加一些您迄今为止尝试过的代码,因为这是一个有问题的TOTP
,您和他们的服务器之间的时间同步似乎已关闭。您应该同步您的服务器。谢谢,我6个月前无法从他们那里得到答案…所以今天在我的邮箱中收到一个安全更新,链接到我自己的帖子,这有点讽刺意味@Ohmlaote:噢,哇,BigCommerce发送了一封安全更新电子邮件?我没有收到,但如果你愿意转发给我,我想看看它的副本。:d