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

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

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

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

需求梳理

  • 首先,什么是防篡改?

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

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

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

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

最终效果

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

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

实现思路

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

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

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

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

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

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

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

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

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

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

总结

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

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

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

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

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

标签:
  • 热门焦点
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事&ldquo;起猛了,我能看得懂日语了&rdquo;。&ldquo;为什么日本人说话我能听懂?&rdquo;&ldquo;中文不像中文,日语不像日语,但是我竟然看懂了&rdquo;&hellip;&hell
  • 华为和江淮汽车合作开发百万元问界MPV?双方回应来了

    8月1日消息,郭明錤今天在社交平台发文称,华为正在和江淮汽车合作,开发售价在100万元的问界MPV,预计在2024年第2季度量产,销量目标为上市首年交付5万辆。
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
  • OPPO K11搭载高性能石墨散热系统:旗舰同款 性能凉爽释放

    日前OPPO官方宣布,将于7月25日14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼
  • 电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top