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

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

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

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

需求梳理

  • 首先,什么是防篡改?

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

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

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

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

最终效果

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

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

实现思路

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

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

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

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

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

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

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

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

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

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

总结

我们来梳理下流程:Vpp28资讯网——每日最新资讯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%2FisTrustedVpp28资讯网——每日最新资讯28at.com

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

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

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

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

标签:
  • 热门焦点
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 如何通过Python线程池实现异步编程?

    线程池的概念和基本原理线程池是一种并发处理机制,它可以在程序启动时创建一组线程,并将它们置于等待任务的状态。当任务到达时,线程池中的某个线程会被唤醒并执行任务,执行完任
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的&ldquo;征求意见版&rdquo;:1、取消P序列
  • 三星电子Q2营收60万亿韩元 存储业务营收同比仍下滑超过50%

    7月27日消息,据外媒报道,从三星电子所发布的财报来看,他们主要利润来源的存储芯片业务在今年二季度仍不乐观,营收同比仍在大幅下滑,所在的设备解决方案
  • 三星Galaxy Z Fold/Flip 5国行售价曝光 :最低7499元/12999元起

    据官方此前宣布,三星将于7月26日也就是明天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
Top