辅助测试和研发人员的一款小插件【数据安全】

这篇具有很好参考价值的文章主要介绍了辅助测试和研发人员的一款小插件【数据安全】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、为什么要做一款这样的小插件

数据,一直在思考如何让数据更安全的流转和服务于客户,围绕这样的想法,我们做过许多方面的扩展。我们落地了服务端的数据切片支持场景化的设计,实现了基于JDBC协议对SQL的拦截与切片,实现了在应用层的全链路数据库审计方案和实现,实现了WEB端明暗水印和文档水印等等,但这些都是在应用服务端的改造;那么围绕以上服务端的思想产生了在端上做一些事情,分析了集团内部服务,多以WEB服务端对客户和用户提供便利的功能和数据使用场景。WEB服务多以依赖浏览器的存在进行访问,所以就试图把数据安全防护的方案前置到浏览器上,在浏览器上做辅助性的数据探测,可以在研发阶段和测试阶段发现数据使用的安全问题,比如某个接口的返回了明文手机号,某个页面未使用身份信息但是调用的接口返回了等等场景...

所以我们要做一个浏览插件把数据安全防护能力前置到端上实现,它不会影响开发者和测试人员...

二、解决的思路和想法

第一步说明了我们为什么要做一款这样的小工具,这个章节就是如何去解决上面的问题和想法。

1、浏览器占比分析

市场上的浏览器chrome/firefox/safri....从市场上数据分析目前chrome浏览器占比份额为66.93%,基本主导了浏览器市场,排名第二的是MicrosoftEdge浏览器。根据这样的一个结果我们优先从chrome插件去着手。

2、知识面的延伸

我们团队侧重于后端的方向研发,在前端侧的能力相对来说比较弱势特别是在浏览器插件又涉及到一些底层的运转机制等;首先官方文档去了解chrome插件开发,明确了目前chrome支持的插件版本为v2和v3,其中不好的消息就是v2在2023年的时候会被后续的版本放弃,意味着v2和v3要同时进行,所以又去了解了一下版本的差异,两个版本在网络拦截方面有了比较大的改动,后者变成了规则的形式,对拦截方面不是太友好。

3、想法和功能设计

要把数据安全部分防护能力前置到浏览器端,意味着要对当前的功能做分析和实现,首先插件能力不能对研发和测试人员产生影响,其次使用要方便。就有了以下的四个点的想法:

第一是WEB水印能力

通过对插件机制的了解,可以在安装插件之后,对生效的站点修改dom的结构,把水印自动的增加到页面中。

第二个想到的是敏感的数据

应用的敏感数据来源分为三个部分:页面渲染的资源,接口请求的数据,接口返回的数据,围绕这一层的构思,最终定义要实现对页面和请求的拦截。

第三想法是对页面的操作的事件监听

这个的来源于某些站点会提供大量的数据,用户在使用的时候可以直接使用把数据复制到其它数据,这样的操作属于用户个人行为也不是文件的形式,用户在复制的过程中无法第一时间感知是否为敏感,没有办法做到第一时间的追踪和防护。

第四个..其实是额外的延伸

我们目前同时也做数据流动链相关的项目,在项目进行的过程中发现会在前端路由与后端路由的链条缺失,想到浏览器插件的运行机制是可以通过dom的对象拿到前端页面的路由,这样的思路就可以填补了这块数据链关系的缺失。

三、落地的路上很多坑

1、简易逻辑图

辅助测试和研发人员的一款小插件【数据安全】

2、devtool的坑

在chrome插件的生命周期中,在background能监听请求发出、返回等事件,一般能获取的事件如下:

// web请求监听,最后一个参数表示阻塞式,需单独声明权限:webRequestBlocking
chrome.webRequest.onBeforeRequest.addListener(details => {
  // cancel 表示取消本次请求
  if(details.type == 'image' || details.type === 'medis') return {cancel: false};
}, {urls: ["<all_urls>"]});


//ajax生命周期开始
chrome.webRequest.onBeforeRequest.addListener(details => {
console.log('onBeforeRequest', details);
}, { urls: ["*://*.jd.com/**"] });


chrome.webRequest.onBeforeSendHeaders.addListener(details => {
    console.log('onBeforeSendHeaders', details)
  },
  { urls: ["*://*.jd.com/**"] },
  ['blocking', 'requestHeaders', 'extraHeaders']
);


// 可以拦截ajax
chrome.webRequest.onResponseStarted.addListener(details => {
console.log('onResponseStarted', details);
}, {urls: ["*://*.jd.com/**"]});


// 请求完成,但是取不到response结果
chrome.webRequest.onCompleted.addListener(details => {
    console.log('onCompleted', details);
}, {urls: ["*://*.jd.com/**"]

该方式无法拿到response内容,从网上常见的解决方案,是给浏览器插件添加devtools_page模块,然后在devtools的页面添加request结束事件,如下:

chrome.devtools.network.onRequestFinished.addListener(
  function(request) {
     //request 包含请求响应数据,如:url,响应内容等
     //request.request.url 接口 的url
     //request.getContent 接口返回的内容
  }
);

但是该方式有个问题,就是想要触发devtools的页面内容,需要在页面按F12呼出浏览器的控制台,这个体验就很一般,所以devtools这种形式更像是为开发人员提供debug工具时引入的。

3、xhr/fetch

因为上文使用两种方式的局限性,所以考虑重写xhr,然后在页面加载时进行注入替换,重写xhr的方法如下:

(function () {
  var open = XMLHttpRequest.prototype.open;
  var send = XMLHttpRequest.prototype.send;


  XMLHttpRequest.prototype.send = function (body) {
    this["hookQuery"] = body;
    send.apply(this, arguments);
  };


  XMLHttpRequest.prototype.open = function () {
    this.addEventListener("load", function () {
      if (this.responseType === "" || this.responseType === "text") {
        window.dispatchEvent(
          new CustomEvent("pageScript", {
            ...
          })
        );
      }
    });
    open.apply(this, arguments);
  };
})()

主要改写了原有send方法和open方法,在send时,将请求的参数记录到xhr实体的一个属性里,然后在请求触发并返回(load事件)后,将请求的参数、响应的返回内容,通过事件发送出去,事件会在content_scripts进行监听和处理,content_scripts部分代码如下:

// 加载重写的xhr所在js文件,然后注入到当前页面的document中,这样业务的页面会加载这段js
var hook = document.createElement("script");
hook.src = chrome.runtime.getURL("script/hook.js");
hook.onload = function () {
  this.remove();
};
(document.head || document.documentElement).appendChild(hook);


// 监听xhr发送过来的消息
window.addEventListener(
  "pageScript",
  function (event) {
    // 处理逻辑
  },
  false
);

五、效果演示

辅助测试和研发人员的一款小插件【数据安全】

辅助测试和研发人员的一款小插件【数据安全】

辅助测试和研发人员的一款小插件【数据安全】

六、未完待续

第一版的功能以敏感数据防护为主导线,后续会增加数据安全其它的防护和感知能力,从端上协助业务解决数据安全的风险

作者:CCO体系 郝帅卫

来源:京东云开发者社区文章来源地址https://www.toymoban.com/news/detail-464609.html

到了这里,关于辅助测试和研发人员的一款小插件【数据安全】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DIY一款小程序

    前段国庆假期时间,去了清远玩顺便过了一把diy手工陶瓷的瘾,回来后和几位技术吹水起这件事,结果技术A笑嘻嘻的对我说:diy手工算什么,diy小程序、H5你见过吗? diy小程序? 我第一时间想到的是低代码平台,事实上A聊的也是低代码平台,只不过在他的一阵吹夸下,便激

    2024年02月09日
    浏览(38)
  • 利用无代码工具开发一款小程序

    日常我们开发小程序的时候都是要从写代码开始,但是写代码这个事只有专业开发才可以干,那作为普通人,如果也希望开发小程序,有没有更好的方案呢? 答案是肯定的,2014年Forrester首次提出了低代码的概念,利用更少的代码更快的创建应用。Forrester把这种无编程经验的

    2024年02月06日
    浏览(33)
  • 基于Flutter的一款摸鱼APP的UI自动化测试实践

    最近想在全网找一个好用的摸鱼app,为了上班时摸摸鱼,毕竟一直摸鱼一直爽嘛。对比了网上几款摸鱼软件,最终选择这款应用——摸鱼kik。以往所用的RSS订阅在摸鱼kik中发挥到了极致,我们既可以订阅感兴趣的内容,也可以“二次聚合”我们想要的信息。 给大家截了几张图

    2023年04月11日
    浏览(41)
  • 大佬,一款小而美的Application组件,了解一下

    Android开发过程中,Application类的角色不容忽视。它不仅是程序启动的入口,同时也代表着整个应用程序的生命周期。在Application中,我们通常执行以下操作: 初始化各种第三方库 注册ActivityLifecycleCallbacks以监控应用的前后台状态 提供全局的Application实例以便在后续代码中使用

    2024年02月13日
    浏览(39)
  • C++制作一款小黑子键盘提示音程序

    不好意思我漏出鸡脚了。 首先讲一下思路,这次制作的小黑子相当于键盘提示音,输入J,N,T,M,会发出“鸡你太美”的声音,连续按下JNTM则会发出“你干嘛啊,哎呦”的声音。 完整的工程和代码以及成品已经上传至百度网盘,喜欢的同学可以下载: 链接:https://pan.baidu.com/

    2024年02月11日
    浏览(37)
  • 安全渗透测试中的一款免费开源的超级关键词URL采集工具

    安全渗透测试中的一款免费开源的超级URL采集工具。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具,支持研究学习,切勿用于非法犯罪活动,对于恶意使用该工具造成的损失,和本人及开发者无关。 ####

    2024年02月03日
    浏览(60)
  • 电脑卡顿分享一款小工具MemReduct让电脑起飞不卡顿

    手机技巧 | 电脑软件  | 电视软件  |实用干货 | 你是否经常遇到电脑运行缓慢,内存占用过高,甚至出现死机或蓝屏的情况?你是否想要优化你的电脑性能,提高运行速度,节省电池寿命?如果你的答案是肯定的,那么你一定要试试mem reduct这款内存管理工具。 *创作不易,点

    2024年02月16日
    浏览(32)
  • 测试人员必用的10个Chrome扩展插件

    背景 :谷歌Chrome浏览器是全球所有测试人员最受欢迎和必备的浏览器之一,Chrome浏览器为我们提供了许多扩展的选择,可以让我们高效和省时地完成工作。以下为作者观点: 1. Testsigma Recorder Testsigma Recorder用于记录与网络应用程序的端到端交互,并将动作存储为纯英文句子,

    2024年02月11日
    浏览(57)
  • Java基于微信小程序的乡村旅游平台设计与实现_一款小程序展示全县乡村风景(1)

    本次搭建一个乡村旅游系统的微信小程序,有管理员和用户。管理员功能有个人中心,用户管理,景点分类管理,旅游景点管理,村游信息管理,美食类型管理,美食特产管理,系统管理,订单管理。用户可以注册登录,查看景点信息,村游信息,美食信息,可以进行充值,

    2024年04月16日
    浏览(36)
  • 一款自动生成单元测试的 IDEA 插件

      今天来介绍一款工具Squaretest,它是一款自动生成单元测试的插件,为什么会用到它? 主要因为最近公司上了代码质量管控的指标,会考评各个项目的单元测试覆盖率,以及sonar扫描出来的各种问题,很多老项目老代码,或者着急交付的项目,单元测试严重缺失,覆盖率只有

    2024年04月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包