blessing-skin-server icon indicating copy to clipboard operation
blessing-skin-server copied to clipboard

用户注册时 BS 无法正确处理 X-Forwarded-For 头部中有多个 IP 的情况

Open tnqzh123 opened this issue 1 year ago • 0 comments

Blessing Skin 版本

commit 2dc2409 @ dev branch

PHP 版本

8.1

出现问题时所使用的浏览器

Microsoft Edge

您正在使用的 Web Server

Nginx

您正在使用宝塔吗?

  • [ ] 是

出现了什么问题?

X-Forwarded-For 头部中含有多个 IP 地址时(如 1.1.1.1, 2.2.2.2, 3.3.3.3),Blessing Skin 获取到的 IP 地址始终为最后一个(3.3.3.3),但这是代理服务器的地址。这会导致用户注册 IP 被记录为 CDN 节点或反向代理服务器的 IP 地址。

根据 MDN,当 X-Forwarded-For 头部中含有多个 IP 地址时,第一个 IP 地址为客户端的 IP 地址(在上例中为 1.1.1.1)。

错误日志

No response

重现步骤

架构为 Client -> CDN -> Reverse Proxy -> Origin,源站获取到的 X-Forwarded-For 头部的值为 <client>, <cdn>

此时 client 发起注册并成功,数据库 users 表中该用户对应的 ip 字段的值为 CDN 节点的 IP 地址(<cdn>)。

tnqzh123 avatar Aug 07 '22 21:08 tnqzh123