当前位置:首页 > 科技  > 软件

产品经理:前端实现网页防篡改,你会怎么做?

来源: 责编: 时间:2024-03-19 09:25:44 326观看
导读如果产品经理要求系统中某个页面的输入框做防止篡改处理,你会怎么做呢?需求梳理首先,什么是防篡改?简单来说,就是用户输入input框值,我们传给后端的值就是用户输入的正常情况下用户输入input框值,就是我们传递给后端的值,但是

如果产品经理要求系统中某个页面的输入框做防止篡改处理,你会怎么做呢?66D28资讯网——每日最新资讯28at.com

需求梳理

  • 首先,什么是防篡改?

简单来说,就是用户输入input框值,我们传给后端的值就是用户输入的66D28资讯网——每日最新资讯28at.com

  • 正常情况下用户输入input框值,就是我们传递给后端的值,但是部分浏览器插件或者恶意脚本会更改用户输入的值
  • 常见针对的是输入的钱包地址,我们需要防范被浏览器插件和恶意脚本更改66D28资讯网——每日最新资讯28at.com

  • 因为实现的效果需要对已有的业务无任何侵入性,保证原有业务的正常运行66D28资讯网——每日最新资讯28at.com

  • 这里的需求背景在nuxt2技术栈66D28资讯网——每日最新资讯28at.com

最终效果

  • 业务方只需要加上这个指令就可以

图片图片66D28资讯网——每日最新资讯28at.com

实现思路

  • 我们如何保证对原有的代码没有侵入性,保证不影响原有的功能?对此我们想到一个自定义指令,在指令里面操作。但是一般指令都是直接写在组件里面的,并不是写在真实的 input 标签上,对此,我们要变更我们的指令,让其去找到真正的 input 标签。
// 通常情况下, 这是一个Input组件,我们需要给这个指令找到其真正的 input 标签<Input v-xxx/>
  • 这里的代码实现的是如何找到真实的 input 标签。

图片图片66D28资讯网——每日最新资讯28at.com

  • 如何在指令里面发送请求给后端?对此,我们在指令里面使用自定义事件,让真实的 input 标签绑定上自定义事件
  • 里面涉及2个知识点
  1. 如何给绑定过的 input标签解绑事件?
  2. 如何在指令里面调用请求的方法
  • 问题1答案,我们在指令的节点node, 在 vnode绑定上一个自定义函数,此自定义函数在解绑事件的时候在调用
  • 问题2答案,我们在vnode.context调用自定义方法tamperFn(); 这里的vnode.context 就是 this,相当于我们调用了 this.tamperFn(); 此处的this就是 Vue实例 (在下面的代码事例中有个属性 isTrusted 至关重要)

图片图片66D28资讯网——每日最新资讯28at.com

图片图片66D28资讯网——每日最新资讯28at.com

  • 至此,我们已经实现如何不侵入业务的情况下找到 input 标签 & 如何在找到的 input 标签绑定事件并且发送请求出去 & 解绑事件 (有个核心问题,到目前为止没有看到如何区分提交的表单数据是用户写的还是被浏览器插件恶意改的,且继续往下看)
  • js 的 event 有个属性 isTrusted
  • 点击链接了解 isTrusted[1]

图片图片66D28资讯网——每日最新资讯28at.com

  • 首先要对所有的 input 标签使用Object.getOwnPropertyDescriptor 进行劫持,找到 input 标签的 set 属性,此时,当变更 input 的输入值我们都可以监控到变化,当有js变更input输入框的值都会触发 set 方法。

图片图片66D28资讯网——每日最新资讯28at.com

  • 上述的功能代码是一个完整的 config.js, 启动项目的时候直接在 nuxt.config.js 加载这个 config.js 即可,业务团队使用一个指令即可完成需求。

总结

我们来梳理下流程:66D28资讯网——每日最新资讯28at.com

  1. 首先使用Object.getOwnPropertyDescriptor 进行劫持所有的 input 标签, 在里面会触发自定义事件dispatchTamper
  2. 自定义事件绑定在真实的 input 标签上,在浏览器执行js阶段完成了绑定事件。通过 vnode.context 我们可以调用 Vue.prototype.tamperFn 方法。在 tamperFn 里面拿到 isTrusted 来区分是不是被篡改的值。
  3. 我们在绑定 input 标签的事情同时,设置了 node.cusFn = cusFn, 用来解绑事件。

Reference

[1]https://developer.mozilla.org/zh-CN/docs/Web/API/Event/isTrusted: https://link.juejin.cn?target=https%3A%2F%2Fdeveloper.mozilla.org%2Fzh-CN%2Fdocs%2FWeb%2FAPI%2FEvent%2FisTrusted66D28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-77688-0.html产品经理:前端实现网页防篡改,你会怎么做?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 探索C++编程的利器:全面解析pragma的妙用

下一篇: 学会使用aiofiles模块,让Python文件操作更高效!

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • Java NIO内存映射文件:提高文件读写效率的优秀实践!

    Java的NIO库提供了内存映射文件的支持,它可以将文件映射到内存中,从而可以更快地读取和写入文件数据。本文将对Java内存映射文件进行详细的介绍和演示。内存映射文件概述内存
  • 19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    今天这篇文章跟大家分享18个JS单行代码,你只需花几分钟时间,即可帮助您了解一些您可能不知道的 JS 知识,如果您已经知道了,就当作复习一下,古人云,温故而知新嘛。现在,我们就开始今
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 三星获批量产iPhone 15全系屏幕:苹果史上最惊艳直屏

    按照惯例,苹果将继续在今年9月举办一年一度的秋季新品发布会,有传言称发布会将于9月12日举行,届时全新的iPhone 15系列将正式与大家见面,不出意外的话
  • 上海举办人工智能大会活动,建设人工智能新高地

    人工智能大会在上海浦江两岸隆重拉开帷幕,人工智能新技术、新产品、新应用、新理念集中亮相。8月30日晚,作为大会的特色活动之一的上海人工智能发展盛典人工
Top