You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现仅允许从site1跳转访问site2,禁止直接或其他站点跳转访问?

仅允许site1跳转访问site2的实现方案

以下是两种可直接落地的实现方案,可根据你的安全要求选择:

  • 方案1:服务端校验HTTP Referer字段(低成本快速实现)

浏览器从A站点点击链接跳转到B站点时,默认会在请求头中携带Referer字段,标明跳转来源的页面地址,你可以直接在site2的服务层/反向代理层做规则校验:

  • 校验规则:如果Referer匹配http://www.site1.com/*规则,允许正常访问;其余情况(Referer为空、Referer为其他站点域名)直接返回403错误或自定义拦截页。

  • 快速部署示例(Nginx反向代理场景):在site2对应的server配置块中加入以下规则即可生效

    valid_referers *.site1.com site1.com;
    if ($invalid_referer) {
        return 403;
    }
    
  • 注意事项:你当前site1的a标签加了rel="noreferrer"属性,使用该方案需要删除这个属性,否则跳转时不会携带Referer头,会导致合法的跳转请求也被拦截。

  • 缺点:Referer字段可被篡改,部分隐私类浏览器插件也会主动清空Referer,存在误杀正常用户的可能,安全性一般。

  • 方案2:签名Token校验(高安全性推荐)

该方案不会受浏览器配置、插件影响,也无法被伪造篡改,适合对安全要求高的场景:

  1. site1和site2提前约定好唯一的加密密钥,site1生成指向site2的跳转链接时,拼接两个参数:http://www.site2.com?token=xxx&t=当前时间戳,其中xxx是用约定密钥对「时间戳+可选的用户标识」加密生成的字符串。
  2. site2收到访问请求后,先做两层校验:首先判断时间戳是否在预设有效期内(比如5分钟,避免链接被恶意复用),再用相同密钥对收到的时间戳等参数做加密,和传入的token做比对,一致才允许访问。
  3. 首次校验通过后,可以给用户种下site2域名下的会话Cookie,后续用户在site2内部跳转不需要重复校验Token,不影响使用体验。

内容的提问来源于stack exchange,提问作者Atanas Ivanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:15:06