前端跳转第三方网页中间页

news2024/10/6 14:23:01

前端跳转安全提示 掘金跳转中间页

  • 背景介绍
  • 跳转过渡页的优点
  • 实现原理解析

哈喽啊小伙伴们久等了 消失了有半年了 ,因为个人工作原因没腾出时间给大家分享日常踩坑和特殊功能的讲解。不过这次我回来了就要好好分享了

背景介绍

前端小伙伴一定知道CSDN 和 稀土掘金 两大社区吧,那么你大概率会见过这样的图片
在这里插入图片描述
再看看市面上大多有一定规模的网站都有这么一个网站 ,那么他是来做什么的呢,我们来大胆推测一般

跳转过渡页的优点

  • 防止手误点击跳转,要刚好是一个钓鱼网站就麻烦了
  • 甩锅专用(你懂得),也可在这做一些数据埋点搜集一下自己的用户流失到哪去了
  • 安全考虑,我么知道如果A页面直接跳转得到B页面的话

此时网站 B 可以通过 window.opener 获取到 A 网站的 window 对象。
然后通过 window.opener.location.href = ‘www.baidu.com’ 这种形式跳转到一个钓鱼网站

实现原理解析

就不分析了,我们直接来说逻辑吧

  • 首先我们打开F12看到 跳转都是a标签,那么我们只需要对a标签做一个事件代理是不是问题就能解决呢
    a标签事件代理
* 
* @param {Array} whiteDomList 白名单
* @param {String} safeLink  跳转过渡页 
* @description 劫持所有的a标签事件
* @example SetSafeA([])
*/
function SetSafeA(whiteDomList, safeLink = 'https://link.juejin.cn/?target=') {
const aArr = document.getElementsByTagName('a')
Array.from(aArr).forEach(item => {
  item.onclick = () => {
    let target = item.getAttribute('href')
    if (/^\//.test(target)) {
      // 相对本站链接
      return true
    }
    const isSafe = undefined !== whiteDomList.find(item => {
      return target.indexOf(item) !== -1
    })
    if (!isSafe) {
      window.open(`${safeLink}${target}`, '_blank')
    } else {
      return true
    }
    return false
  }
})
}

上述方案用原生js实现了对页面的所有的a标签进行了一个事件拦截
那我们能不能在框架中实现这个这个功能呢 下面以vue作为演示

  • vue自定义指定拦截
/**
 * 自定义指令 链接拦截
 */
Vue.directive('outlink', {
  bind: (el, binding) => {
    el.outlink = () => {
      const from = +binding.value
      const url = el.getAttribute('href')
      if (url && url !== '' && url != 'javascript:;') {
        window.location.href = `${GetSchemeByFrom(from)}://outside_webview?url=${url}`
      }
      return false
    }
    el.onclick = el.outlink
  },
  unbind: (el) => {
    el.onclick = null
    delete el.outlink
  }
})

上面的也只是作为一个参考,每个业务都有不同的需求只是提供了一种方案,关于安全的问题就不在这一一赘述了,实在是太多了,有兴趣的可以搜一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dev-C++下载安装详细教程

文章目录前言一、下载Dev-C二、安装Dev-C三、使用Dev-C打印HelloWorld总结前言 本文总结了关于Dev-C下载与安装的详细过程,并使用Dev-C打印了“Hello World!”。本篇博客面向C语言初学者,或者考研复试的学生使用,因为大部分学校的考研复试都使…

为什么 TCP 建立连接需要三次握手

TCP 协议是我们几乎每天都会接触到的网络协议,绝大多数网络连接的建立都是基于 TCP 协议的,学过计算机网络或者对 TCP 协议稍有了解的人都知道 —— 使用 TCP 协议建立连接需要经过三次握手(three-way handshake)。 如果让我们简…

多线程案例-线程池

1.什么是线程池线程存在的意义是当使用进程进行并发编程太重了,此时引入了一个"轻量级的"进程-线程.创建线程比创建进程更高效,销毁线程比销毁进程更高效,调度线程比调度进程更高效..此时我们就用多线程来代替进程进行并发编程了,但是随着对性能的要求的提高,线程相对…

大数据必学Java基础(一百一十八):什么是Maven和它的下载整合

文章目录 什么是Maven和它的下载整合 一、什么是Maven 二、IDEA默认整合了Maven 三、下载地址

【Linux】RHEL8 中nmcli使用,必备!

redhat8中nmcli日常使用 第 2 章 配置以太网连接 Red Hat Enterprise Linux 为管理员提供不同的选项来配置以太网连接。例如: 在命令行中使用 nmcli 配置连接。使用 nmtui 在基于文本的用户界面中配置连接。使用 RHEL 系统角色在一个或多个主机上自动配置连接。使…

电脑小问题:定时关机的设置

设置定时关机生活中,我们有时候需要对电脑进行定时关机。那么,如何设置定时关机呢?步骤如下: 1. 按 win R ,弹出命令窗口,输入 taskschd.msc ,点击确定。 2. 弹出任务计划程序窗口,…

使用ResNet34实现CIFAR10数据集的训练

如果对你有用的话,希望能够点赞支持一下,这样我就能有更多的动力更新更多的学习笔记了。😄😄 使用ResNet进行CIFAR-10数据集进行测试,这里使用的是将CIFAR-10数据集的分辨率扩大到32X32,因为算力相关的…

摘要/哈希/散列算法MD5 SHA1 SHA256 SHA512的区别和MAC算法

一、摘要算法大致都要经过以下步骤 1. 明文数据预处理 1.1 填充比特 MD5、SHA1、SHA256 的分组长度都是512bit 需要填充比特使其位长对512求余的结果等于448 SHA512 的分组长度是 1024bit 需要填充比特使其对1024求余的结果等于896 相同&am…

ECharts基本使用

文章目录Echarts概述Echarts初体验ECharts基础配置Echarts社区介绍Echarts-map使用Echarts概述 常见的数据可视化库: D3.js 目前 Web 端评价最高的 Javascript 可视化工具库(入手难)ECharts.js 百度出品的一个开源 Javascript 数据可视化库Highcharts.js 国外的前…

项目合并后,font字体资源被替换导致TextMeshPro不能显示文字,抢救方法

一,字体消失 项目合并时,因为资源更替,导致TextMeshPro不能找到自己原来使用的font资源,以致不能显示文字。 二、抢救方式 1、找到所有用到TextMeshPro的物体2、把他们的字体重新设置成你要的字体 关键步骤: 1、找…

赛事推荐| 建筑物实例分割和高度估计的多任务学习——2023 IEEE GRSS 数据融合赛道2

1. 赛题名称 联合建筑物提取和高度估计的多任务学习 2. 赛题背景 该轨道定义了建筑物提取和高度估计的联合任务。两者都是建筑改造的两个非常基础和必不可少的任务。与轨道 1 相同,输入数据是多模态光学和 SAR 卫星图像。单视图卫星图像中的建筑物提取和高度估计…

记录redis连接被打满的踩坑之路

一、系统异常现象系统有一个功能向别的系统多线程推送用户数据信息,前几天发现该推送功能报内部错误,经过查看后台日志文件,发现org.redisson.client.RedisConnectionException: Unable to connect to Redis server:,io.netty.cha…

使用docker训练yolov5

使用docker训练yolov5 配置docker,配置的好处是docker中的环境或者说容器坏了不影响主机,并且可以减少配置环境的时间和精力 sudo apt update sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common # c…

Docker 部署SQL Server 2017

Docker 部署SQL Server 2017 Docker部署 registry Docker搭建 svn Docker部署 Harbor Docker 部署SQL Server 2017 Docker 安装 MS SqlServer Docker部署 Oracle12c 文章目录Docker 部署SQL Server 2017一、部署步骤1.下载镜像2.创建容器并运行二、参考文档一、部署步骤 1.下…

Unity 之 资源加载 -- 可寻址系统概念介绍 -- 入门(一)

可寻址系统面板概念 -- 入门(一)一,可寻址系统概念介绍1.1 官方话术1.2 几个概念二,可寻址系统目录介绍2.1 导入工程2.2 目录介绍概述:本片文章带大家了解可寻址系统的相关概念,为大家介绍可寻址系统导入方…

生成数据分析报告pandas_profiling.ProfileReport

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 生成数据分析报告 pandas_profiling.ProfileReport 选择题 对于以下python代码表述错误的一项是? import pandas as pd import pandas_profiling as pp dfpd.DataFrame({ a:[23,18,21], b:[…

excel数据核对技巧:如何用函数公式标识输入正误

我们平时人工录入较长的文本数据时,稍不注意就容易出错。为了避免出错,通常我们会提前对单元格设置数据验证。有些时候,我们还会考虑列与列之间的关系,根据列关系自动判定数据的对错。比如下表,款号、货号、色号、条码的信息均存在…

【MySQL进阶教程】InnoDB引擎

前言 本文为 【MySQL进阶教程】InnoDB引擎 相关知识,下边将对InnoDB引擎介绍,InnoDB引擎架构,事务原理,MVCC等进行详尽介绍~ 📌博主主页:小新要变强 的主页 👉Java全栈学习路线可参考&#xff…

获取每年的周数据 第几周 开始日及结束日 思路

public static void main(String[] args) {int year 2023;SimpleDateFormat simpleDateFormat new SimpleDateFormat("yyyy-MM-dd");while (true) {int weekValue 1;Calendar calendar new GregorianCalendar();//***踩坑 // calendar.setFirstDayOfW…

冒泡排序终极版(模拟qsort)

目录 普通版冒泡排序 qosrt函数 终极版冒泡排序 终极版冒泡排序整体测试代码 普通版冒泡排序 冒泡排序想必大家都很了解了吧,冒泡排序的算法思想就是两两比大小,一轮一轮比,每比完一轮排出一个数字的顺序,那就让我们先来看一…