PHP 7.1 中会话ID URL透传需组合配置:关闭session.use_trans_sid为首选;若必须开启,应精简session.trans_sid_tags、白名单限定session.trans_sid_hosts、启用session.referer_check校验来源。

PHP 7.1 中配置会话 ID 透传(session ID in URL)的安全规则,核心是限制透传范围、关闭非必要透传、校验来源可信性。这不是“开启某个开关”,而是通过组合多个 php.ini 配置项,形成纵深防御。
session.trans_sid_tags:限定哪些 HTML 标签允许自动插入会话 ID
该配置项决定 PHP 在启用 session.use_trans_sid 后,会在哪些标签的 URL 属性中自动追加 SID 参数(如 <a href="...">、<form action="...">)。
默认值通常是:
session.trans_sid_tags = "a=href,area=href,link=href,form=action,frame=src,iframe=src"
✅ 安全建议:
- 若业务完全不需要 URL 透传(推荐),直接设为
session.use_trans_sid = Off,此项可忽略; - 若必须支持(如无 Cookie 环境),则精简标签列表,只保留真正需要的。例如仅允许
<a>和<form>:session.trans_sid_tags = "a=href,form=action"
- ❌ 不要保留
frame、iframe、script等可能被用于跨域注入的标签。
session.trans_sid_hosts:只允许向指定域名透传会话 ID
该配置项是 PHP 7.1 新增的关键白名单机制,防止会话 ID 被泄露到第三方站点。
默认行为是:仅允许当前请求的 $_SERVER['HTTP_HOST'](即同源)。
✅ 安全建议:
- 显式设置可信主机白名单,例如你的主站和静态资源子域:
session.trans_sid_hosts = "example.com,www.example.com,cdn.example.com"
- 多个域名用英文逗号分隔,不加空格;
- ❌ 切勿留空或填入通配符(如
*.example.com),PHP 不支持通配符匹配; - ❌ 禁止加入任何外部域名(如
google.com、cdn.jsdelivr.net)。
session.referer_check:简单但有效的 Referer 源头校验
当 session.use_trans_sid = On 时,此配置可在生成透传链接前检查 Referer 请求头是否来自可信地址,降低会话 ID 被恶意页面诱导点击后泄露的风险。
✅ 安全建议:
- 设为你的应用完整协议+域名(注意末尾斜杠):
session.referer_check = "https://example.com/"
- 若支持 HTTP 和 HTTPS 双协议,建议统一强制 HTTPS,并只填 HTTPS 地址;
- ⚠️ 注意:浏览器在 HTTPS 页面跳转到 HTTP 页面时,或某些隐私设置下,
Referer可能为空或被截断,因此它不能替代 cookie 或严格域名白名单,仅作辅助防护。
最终推荐最小化安全配置组合
session.use_trans_sid = Off ; ✅ 默认关闭,最安全 ; 如果必须开启,请搭配以下三项: ; session.use_trans_sid = On ; session.trans_sid_tags = "a=href,form=action" ; session.trans_sid_hosts = "example.com,www.example.com" ; session.referer_check = "https://example.com/"
关闭 use_trans_sid 是首选方案——现代浏览器均支持 Cookie,且 HttpOnly + Secure + SameSite Cookie 已足够可靠。URL 透传本质是退化方案,易导致会话 ID 泄露至日志、代理、书签、Referer 等不可控位置。
不复杂但容易忽略
立即学习“PHP免费学习笔记(深入)”;



















