You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用密钥验证Bitbucket Webhook签名?

Bitbucket Webhook 签名验证问题解决方案

核心排查与修复步骤

  • 获取原始请求体
    Bitbucket的签名基于未修改的原始请求体字节流生成,若提前用$_POST或框架自动解析过请求体,php://input将无法读取到正确的原始内容。正确获取方式:

    $payload = file_get_contents('php://input');
    
  • 核对密钥一致性
    确保代码中使用的密钥与Bitbucket Webhook配置中的密钥完全一致,注意大小写、空格、特殊字符,不要做任何修改或截断。你的示例密钥q3bn5JCdR1yqK46V需原样使用。

  • 正确生成并验证签名
    你的代码逻辑框架正确,但需使用安全的哈希比较方式避免时序攻击。完整验证代码:

    $secret = 'q3bn5JCdR1yqK46V';
    $payload = file_get_contents('php://input');
    $expectedSignature = $_SERVER['HTTP_X_HUB_SIGNATURE_256'];
    
    $generatedSignature = 'sha256=' . hash_hmac('sha256', $payload, $secret);
    
    // 用hash_equals做安全比较
    if (hash_equals($generatedSignature, $expectedSignature)) {
        // 验证通过,执行部署逻辑
    } else {
        // 验证失败,拒绝请求
    }
    
  • 确认请求头获取正确
    在PHP环境中,X-Hub-Signature-256请求头对应的服务器变量是$_SERVER['HTTP_X_HUB_SIGNATURE_256'],确保变量名拼写正确,无大小写错误。

  • 排除字符集干扰
    确保服务器PHP环境的default_charset设置为UTF-8,避免对请求体做自动编码转换,导致签名计算的基础数据不一致。

内容的提问来源于stack exchange,提问作者Gustavo Soares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:38:28