跳转到主内容
极星编程网:以代码为星,赴技术山海!

Laravel如何做API请求签名_Laravel防止接口被伪造调用【操作】

签名应使用 hash_hmac 而非 md5 或 sha1,因其带密钥且防长度扩展攻击;需包含请求方法、URI(不含 query)、timestamp、nonce 及字典序排序的参数,并从环境变量读取密钥,限制时间戳误差±300秒。 签名怎么生成:用
hash_hmac
而不是
md5
或
sha1
API 请求签名的核心是「不可篡改 + 可验证」,
hash_hmac
是 Laravel 自身推荐的方式(比如
Str::signed()
底层就用它),因为它带密钥、防长度扩展攻击。用
md5($data . $secret)
看似简单,但容易被重放或拼接伪造。 签名内容必须包含:请求方法、完整 URI(不含 query string)、时间戳
timestamp
、随机串
nonce
、以及按字典序排序的 query body 参数(JSON body 需先
json_encode
并规范空格) 密钥不能硬编码在前端或写死在 config 中暴露;建议从
config('app.api_secret')
读,且该值仅存于服务器环境变量 时间戳误差需限制,比如只接受 ±300 秒内的请求,否则直接 401 —— 否则重放攻击成本极低 Laravel 后端怎么验签:别在中间件里手动拼字符串 很多人在中间件里把
$request->method()
、
$request->fullUrlWithQuery([])
、
$request->input()
拼一起再 hash,结果因 URL 编码、空格、数组键序不一致导致验签失败。 统一用
$request->createSignatureString()
这类自定义方法封装拼接逻辑,确保 GET/POST/JSON 一视同仁:URI 去 query、body 用
$request->getContent()
(非
input()
),再 JSON normalize 签名必须从 header 传,比如
X-Signature
,不要放 query 或 body —— 否则验签前就得先解析 body,破坏无状态性 验签失败时返回
401
,但不要透露具体哪步错了(比如不说“时间戳超时”,只说“无效签名”) 前端 JS 怎么安全算签名:别用
crypto-js
直接套用 PHP 的
hash_hmac
crypto-js
默认输出大写 hex,PHP
hash_hmac('sha256', ...)
是小写;而且它对中文、空格、换行的 UTF-8 处理和 PHP 不完全一致,极易验签失败。 Laravel 13.2.0 PHP中文网提供Laravel 13.2.0版本下载,Laravel框架 是基于 PHP 8.3+ 的高性能框架,官方推荐通过 Composer 安装。它内置 AI SDK、JSON:API Resources 及原生向量搜索,支持属性驱动开发与队列路由,大幅提升开发效率。相比旧版,13.2.0 优化了缓存 TTL 管理与实时通信,无需 Redis 即可横向扩展。作为现代 Web 开发首选,它兼顾安全与极速体验,助您快速构建企业级应用。 下载 前端必须用原生
SubtleCrypto
(现代浏览器支持),配合
TextEncoder
确保字节级一致 时间戳统一用
Math.floor(Date.now() / 1000)
,和 PHP
time()
对齐;
nonce
用
crypto.randomUUID()
或 16 字节 base64 如果必须兼容旧浏览器,用
node-forge
而非
crypto-js
,它的
hmac.create()
行为更贴近 PHP 签名失效的典型表现:401 却查不到日志,或本地能过线上失败 最常踩的坑不是算法错,而是环境和传输细节不一致:Nginx 会默认 strip header、Cloudflare 会重写 host、Laravel 的
APP_URL
影响
fullUrl()
输出。 检查 Nginx 是否过滤了
X-Signature
:确认有
underscores_in_headers on;
,且 header 名没下划线(用
X-Signature
而非
X_Signature
) 验签前先
Log::debug('sign string: ' . $signString)
,前后端各打一行,逐字符比对 —— 很多问题出在多一个空格或换行 线上用
phpinfo()
确认
mbstring.func_overload
关闭,否则
strlen()
和
mb_strlen()
混用会导致签名串长度错位 真正麻烦的从来不是“怎么加签名”,而是“哪个环节悄悄改了原始字节”。盯住那串签名原文,比什么都管用。

相关文章