在开放架构中,我们的Webhook接收端通常需要暴露在公网环境下,以便接收底层网关推送的消息。这就带来了一个严重的安全隐患:如果恶意攻击者知道了你的Webhook公网URL,就可以伪造虚假的消息事件向你的服务器发送请求,从而导致业务逻辑混乱或服务器资源耗尽。
因此,为接口设计一套严密的签名校验机制(Signature Verification)是至关重要的防线。常见的做法是:发送方使用共同的密钥(Secret Key)结合时间戳和请求体计算出一个HMAC-SHA256签名,放入请求头中;接收方收到请求后,用同样的算法重新计算并与请求头中的签名进行比对。
以下是一个用Python Flask实现的签名校验中间件代码示例:
import hmac
import hashlib
from flask import Flask, request, jsonify
app = Flask(__name__)
SECRET_KEY = "your_shared_secret_key" # 双方约定的密钥
def verify_signature(request_body, timestamp, received_sig):
# 拼接签名原串
raw_string = f"{timestamp}.{request_body.decode('utf-8')}"
computed_sig = hmac.new(
SECRET_KEY.encode('utf-8'),
raw_string.encode('utf-8'),
hashlib.sha256
).hexdigest()
return hmac.compare_digest(computed_sig, received_sig)
@app.route('/secure/webhook', methods=['POST'])
def secure_webhook():
timestamp = request.headers.get('X-Timestamp')
received_sig = request.headers.get('X-Signature')
raw_data = request.get_data()
if not timestamp or not received_sig:
return jsonify({"code": 401, "msg": "Missing security headers"}), 401
# 校验签名
if not verify_signature(raw_data, timestamp, received_sig):
return jsonify({"code": 403, "msg": "Signature verification failed"}), 403
# 签名通过,正常处理业务
data = request.json
print("安全校验通过,收到合法消息:", data)
# 后续开发可参考标准接口规范:https://www.geweapi.com/docs
return jsonify({"code": 200, "msg": "success"})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
通过这层安全校验,任何没有密钥的非法请求都会被直接拦截在服务大门之外。在构建企业级自动化系统时,安全与功能并重才能确保业务的长治久安。无论是对内接口调用还是对外Webhook接收,严谨的安全设计都是专业开发者的必修课。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2501_92776968/article/details/163371426



