

























@两双筷子还是建议检查一下 GPT 实现的那个 challenge 验证,是硬编码的验证,也就是 GPT,硬编码了 OPENSSL_ALGO_SHA256 实际上只能处理 RSA 签名,对于目前最主流的 ES256 (椭圆曲线) 签名,在底层逻辑上是不匹配的。并且还多处用 @ 抑制 PHP 和 OpenSSL 报错,看一下你本地的公钥的算法,建议一下,或者是 JavaScript 里面有没有声明服务器支持的算法。以及这个插件硬编码了登录的 session 是有问题的,Typecho 登录本身是防御 session 重放的,但是这个硬编码不行,你可以参考另外一个 Passkey 插件,实现的就很好,就是:
// 使用 Typecho 标准的 simpleLogin 方法
$userWidget = \Widget\User::alloc();
$expire = 30 * 24 * 3600;
if (!$userWidget->simpleLogin($user['uid'], false, $expire)) {
error_log('[Passkey][ERROR] Failed to set login state for user: ' . $user['uid'] . ' - ErrCode: ' . self::ERR_UNKNOWN);
$this->error('登录失败,请重试', self::ERR_UNKNOWN);
return;
}
以及这个解码的时候,如果构造一个循环的证书套,这个没有限制解码层数,会把服务器的计算资源耗尽的。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。