拓冰建站拓冰建站
首页 / 资讯中心 / 正文

如何看懂 YOURLS 认证机制:登录 Cookie 与签名时间戳验证完整指南

如何看懂 YOURLS 认证机制登录 Cookie 与签名时间戳验证完整指南【免费下载链接】YOURLS The standard, self hosted, powerful and customizable, URL shortener in PHP项目地址: https://gitcode.com/gh_mirrors/yo/YOURLSYOURLS是一个自托管的 PHP 短链接生成器它的认证体系决定了谁能创建短链、谁能在后台查看统计。本文带你完整走一遍认证流程从浏览器登录后的Cookie 会话到 API 调用的签名signature与时间戳timestamp验证帮你彻底理解这套安全设计。一、认证入口一个总开关所有需要认证的请求最终都会走同一条路径。以 API 为例入口文件yourls-api.php 启动后立刻调用yourls_maybe_require_auth()核心判断includes/functions-auth.php 中的yourls_maybe_require_auth()当站点处于私有模式YOURLS_PRIVATE时引入 includes/auth.php关键函数yourls_is_valid_user()L26会依次尝试4 种认证方式任一成功即放行。这 4 种方式按优先级依次为顺序方式适用场景判定函数1签名 时间戳仅 APIyourls_check_signature_timestamp()2纯签名仅 APIyourls_check_signature()3用户名 密码API 和后台yourls_check_username_password()4登录 Cookie仅浏览器yourls_check_auth_cookie()二、登录 Cookie 是如何工作的1. 登录后写入加密 Cookie用表单登录成功后yourls_store_cookie()L507会写下一个加密 Cookie有效期默认 7 天YOURLS_COOKIE_LIFE可在 includes/Config/InitDefaults.php 调整。之后每次访问yourls_check_auth_cookie()L358都会拿 Cookie 值与每个合法用户的预期值做hash_equals比对命中即恢复会话。2. Cookie 名称本身就是安全设计yourls_cookie_name()L677生成的名字形如__Host-yourls_随机盐包含两层防护每站点唯一盐值由站点 URL 派生避免sho.rt和very.sho.rt这类子域之间的 Cookie 串号__Host-/__Secure-前缀L608HTTPS 环境下自动启用阻止兄弟子域读写该 Cookie并强制只通过安全通道传输。Cookie 默认还带HttpOnly和SameSiteLax属性防止 XSS 窃取与 CSRF 携带。三、API 签名与时间戳验证不传密码也能调 APIYOURLS API 支持免密认证核心是把密钥换成了32 位签名由用户名密钥派生见yourls_auth_signature()L469。1. 纯签名模式请求只带?signaturexxx即可。yourls_check_signature()L446把签名与所有合法用户的签名逐一比对命中即通过。适合简单脚本但签名是永久令牌。2. 签名 时间戳模式推荐请求形如yourls-api.php?timestamp1716800000signaturesha256哈希actionshorturlurl...验证流程在yourls_check_signature_timestamp()L385中校验时间戳新鲜度yourls_check_timestamp()L495要求当前时间与戳的差值小于YOURLS_NONCE_LIFE默认 12 小时过期请求直接拒绝——有效防重放攻击限定哈希算法默认只允许sha256 / sha384 / sha512L436可通过hash参数指定比对签名分别计算hash(timestamp signature)和hash(signature timestamp)任一匹配即登录成功。官方远程 API 调用示例见 sample-remote-api-call.txt测试用例 tests/tests/auth/LoginAPISecureTimeTokenTest.php 演示了签名hash(sha256, yourls_auth_signature(yourls).time())的标准生成方式。四、表单登录背后的三道防线即使走最普通的用户名密码登录yourls_check_username_password()L130也藏着多层校验一次性令牌Nonce登录表单里有一个隐藏的nonce字段admin_login由yourls_verify_nonce()L804校验。它是时间片 动作 用户的 HMAC 哈希12 小时内有效防止登录表单被跨站重放CSRF安全比对所有密码/签名/Cookie 比对都用hash_equals()抵御时序侧信道攻击自动密码加密includes/auth.php 会在后台首次加载时把配置文件里的明文密码自动替换为phpass:xxx哈希yourls_hash_passwords_now()L180并持续警告废弃的 MD5 存储方式。五、安全实践清单✅私有模式在 config.php 中定义YOURLS_PRIVATE全站受保护✅API 优先用签名 时间戳避免把用户名密码写进脚本✅签名别当密码用纯签名是永久令牌泄露即失守配合时间戳可限制重放窗口✅务必使用 HTTPS才会启用__Host-Cookie 前缀与 Secure 属性把浏览器侧防护拉满✅密钥要随机YOURLS_COOKIEKEY是 Cookie、Nonce、签名派生的总密钥请换成足够长的随机字符串。总结YOURLS 的认证是一套小而全的设计Cookie 会话解决浏览器登录体验签名时间戳解决 API 免密调用的安全Nonce补上 CSRF 防线密码自动哈希守住存储底线。理解这四块你就掌握了 YOURLS 私有部署的全部安全要点。想动手验证可以参考 tests/tests/auth/ 目录下的完整测试用例以及登录表单渲染逻辑 includes/functions-html.php。【免费下载链接】YOURLS The standard, self hosted, powerful and customizable, URL shortener in PHP项目地址: https://gitcode.com/gh_mirrors/yo/YOURLS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门