首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从零实现浏览器Web脚本

window与unsafeWindow,那么如何实现一个完全隔离window沙箱环境就值探索,再比如在Web页面是无法跨域访问资源如何实现在Inject Script跨域访问资源CustomEvent...此外在很久之前一直好奇GreasyFork上是如何实现用户脚本安装,因为实际上并没有在那个安装脚本按钮之后发现什么特殊事件处理,以及如何检测到当前已经安装脚本管理器并且实现通信,之后简单研究了下发现实际上只要用户脚本是以...那么我们隔离环境,可以得到window对象是一个隔离安全window环境,而unsafeWindow就是用户页面window对象。...曾经很长一段时间都认为这些插件可以访问window对象实际上是浏览器拓展Content Scripts提供window对象,而unsafeWindow用户页面window,以至于我用了比较长时间探寻如何直接在浏览器拓展...)注释,其中这个sourceURL会将注释中指定URL作为脚本源URL,并在Sources面板以该URL标识显示该脚本,这对于调试追踪代码时非常有用,特别是加载动态生成或内联脚本时。

57950
您找到你想要的搜索结果了吗?
是的
没有找到

从油猴脚本管理器角度审视Chrome扩展

动态执行代码以及Content Script"run_at": "document_start"建立消息通信确认注入tab,这个方法是不是看起来很简单,但就是这么简单问题思索了很久是如何做到...以及unsafeWindow两个对象,window对象是一个隔离安全window环境,而unsafeWindow就是用户页面window对象。...曾经很长一段时间都认为这些插件可以访问window对象实际上是浏览器拓展Content Scripts提供window对象,而unsafeWindow用户页面window,以至于我用了比较长时间探寻如何直接在浏览器拓展...window沙箱环境,也就是说我们希望网站本身执行任何不会影响到我们window对象,比如网站本体window上挂载了$$对象,我们本身不希望其能直接在开发者脚本访问到这个对象,我们沙箱环境是完全隔离...xmlHttpRequest 接着我们来聊最后一个问题,脚本管理器是如何做到可以跨域请求,实际上因为在前边我们明确了用户脚本浏览器当前页面执行,那么理所当然就会存在同源策略问题,然后脚本管理器只要声明了链接域名

10410

初探富文本之React实时预览

一些场景中比如组件库文档编写时,我们希望能够有实时预览能力,也就是用户可以文档中直接编写代码,然后页面实时预览,这样可以用户更加直观了解组件使用方式,这也是很多组件库文档中都会有的一个功能...例如最简单一个攻击形式,作为用户代码编写了函数能取得当前用户Cookie,并且构造了XHR对象或者通过fetch将Cookie发送到我服务器,如果此时网站恰好没有开启HttpOnly,并且将这段代码落库了...,那么以后每个打开这个页面的其他用户都会将其Cookie发送到我服务器,这样就可以拿到其他用户Cookie,这是非常危险存储型XSS攻击,此外上边也提到了SSR渲染模式,如果恶意代码服务端执行那将是更加危险操作...曾经很长一段时间都认为这些插件可以访问window对象实际上是浏览器拓展Content Scripts提供window对象,而unsafeWindow用户页面window,以至于我用了比较长时间探寻如何直接在浏览器拓展...,但是实际上我们还可以换个思路,我们可以将用户代码放置于一个iframe执行,这样我们就可以将用户代码隔离一个独立环境,从而实现沙箱效果,这种方式也是比较常见,例如CodeSandbox

39220

油猴脚本重写fetchxhr请求

运行在本地 3002 端口上,并且设置跨域,允许从 http://127.0.0.1:5500 访问。 油猴脚本 先简单写一个插入 是油猴脚本文本 脚本,后边再进行修改。...(); 此时页面已经被成功拦截: image-20220823101447976 这里提一句,油猴脚本如果使用 @grant 申请了权限,此时脚本会运行在一个沙箱环境,如果想访问原始 window...并且我们加了 @run-at ,脚本尽快执行。 fetch 请求 html 请求 test.js 添加 fetch 代码。...重写 XMLHttpRequest 原型对象 open 或者 send 方法,函数内拿到用户当前 xhr 实例,监听 readystatechange 事件,然后重写 responseText 。...总 通过对 fetch xhr 重写,我们基本上可以对网页「为所欲为」了,发挥想象力通过油猴脚本应该可以做很多有意思事情。

3K20

【DB笔试面试701】Oracle如何普通用户可以杀掉自己用户会话?

♣ 题目部分 Oracle如何普通用户可以杀掉自己用户会话?...♣ 答案部分 普通用户想要杀掉会话必须要具有ALTER SYSTEM权限,但是由于该权限过大,用户可能使用该权限错杀其他用户会话,所以,有没有其它办法可以实现该功能呢?...首先,可以创建一个查询自己会话信息视图,将该视图创建公共同义词,然后创建一个存储过程,该存储过程实现杀掉会话需要,最后将该存储过程执行权限赋权给PUBLIC即可解决这个问题。...由于79会话属于LHR用户,所以,避免了误杀其它用户会话,当使用LHR用户时候,可以正常杀掉会话。...& 说明: 有关KILL SESSION更多内容可以参考BLOG:http://blog.itpub.net/26736162/viewspace-2121019http://blog.itpub.net

1.2K40

javascript如何将字符串转成变量或可执行代码

有这样一个需求:当前作用域内有未知一些变量,其中一个函数可以拿到某个变量名字符串,怎么能在函数内通过传进来字符串取到作用域链变量值,示例小 demo 如下: const name = '周小黑...' const age = 18 /** * @param {String} e 变量名字符串 * @returns value 通过变量名字符串作用域链取到变量值 */ function...return value } const str = fn('name') 要解决上面的问题,主要就是怎么将字符串转变成可执行代码?...主要有三种方式: eval() 函数 eval() 函数会将传入字符串当做 JavaScript 代码进行执行,所以下面的字符串可以正确取到变量对应值,eval 对比 new Function ...setTimeout 定时器 setTimeout 第一个参数我们平时都是传一个函数,它其实也是可以传字符串进去浏览器是可以正常执行node环境中会报错。

34230

为 Node.js 应用建立一个更安全沙箱环境

一些应用,我们希望给用户提供插入自定义逻辑能力,比如 Microsoft Office VBA,比如一些游戏中 lua 脚本,FireFox 「油猴脚本」,能够用户发在可控范围权限内发挥想象做一些好玩...与运行在「用户电脑中」客户端应用不同,用户自定义脚本通常只能影响用户自已,而对于在线应用或服务来讲,有一些情况就变得更为重要,比如「安全」,用户「自定义脚本」必须严格受到限制隔离,即不能影响到宿主程序...而 Safeify 就是一个针对 Nodejs 应用,用于安全执行用户自定义非信任脚本模块。 怎样安全执行动态脚本? 我们先看看通常都能如何在 JavaScript 程序动态执行一段代码?...从另一个层面来看,况且或许有时我们还想自定义脚本支持异步处理呢。 如何建立一个更安全一些沙箱? 通过上文探究,我们并没有找到一个完美的方案 Node.js 建立安全隔离沙箱。...处理数据结果,还有公开给沙箱方法 进程间如何通讯,需要「动态代码」处理数据可以直接序列化后通过 IPC 发送给隔离 Sandbox 进程,执行结果一样经过序列化通过 IPC 传输。

2.2K10

油猴脚本入坑指南

基础 这部分主要是开始写油猴脚本前应当有所了解知识 常见用户脚本管理器 Tampermonkey 应该是各位见得最多也是最知名,好用又稳定,多浏览器支持,很喜欢 Greasemonkey 用户脚本始祖...新标签页打开指定地址(用来绕过 Chrome 会阻止所有非用户触发window.open限制) GM_registerMenuCommand 向油猴插件菜单添加脚本指令(通常用于打开自己写设置界面或者执行代码之类...如果你脚本时候有尝试直接通过 window 添加或访问网页全局变量,你会发现这是没有效果 这是因为油猴沙箱机制,任何人都无法从 window 直接访问到油猴 API 或脚本变量,保证了安全...如果你确实需要访问 window,可以使用 unsafeWindow,但在正式发布脚本你不应该将任何油猴 API 或者脚本变量通过它暴露到 window unsafeWindow 不同脚本管理器表现可能会有所不同...IDE 编写油猴脚本 一般脚本管理器自带编辑器功能十分单一,全程在里面写代码肯定十分不爽,那么如何使用自己 IDE 编写脚本并随时保存随时生效呢 答案是利用元数据 @require,它不仅能引用网络脚本

3.9K00

Tampermonkey安装与使用

Tampermonkey 是一款免费浏览器扩展最为流行用户脚本管理器,虽然有些受支持浏览器拥有原生用户脚本支持,但 Tampermonkey 将在您用户脚本管理方面提供更多便利。...如果访问了@exclude与之匹配内容则不执行自定义JavaScript代码 @exclude优先权大于match@include。如果二者都匹配了,那么默认执行@exclude规则。...也就是说即是’白名单‘也是’黑名单‘那么默认为’黑名单‘ 第三方链接 @require 指向脚本本身开始运行之前加载执行 JavaScript 文件。...脚本可以有任意数量@require 键。每个 @require 安装脚本时下载一次,并与脚本一起存储在用户硬盘驱动器上。指定 URL 可能与安装脚本 URL 相关。...无论如何,在给定注入时刻之后发生所有 DOMNodeInserted DOMContentLoaded 事件都被缓存并在注入时传递给脚本

2.2K40

.NETC# 代码测量代码执行耗时建议(比较系统性能计数器系统时间)

.NET/C# 代码测量代码执行耗时建议(比较系统性能计数器系统时间) 发布于 2018-11-06 15:33...不过传统代码编写计时方式依然有效,因为它可以生产环境或用户端得到真实环境下执行耗时。 如果你希望 .NET/C# 代码编写计时,那么阅读本文可以获得一些建议。...基本计时 计时一般采用下面这种方式,方法执行之前获取一次时间,方法结束之后再取得一次时间。 // 方法开始之前。 Foo(); // 方法执行之后。...这样,前后两次获取时间差即为方法 Foo 执行耗时。 这里不会提到性能测试工具或者基准性能测试这些方法,因为这些测试代码不会运行于用户端。...此类型时间统计是按照高性能高精度要求来做,于是你可以用它获得高精度计时效果。不过,如果你对性能要求近乎苛刻,例如你方法会被数百万次或更高频地执行,那么就需要开始斟酌如何调用里面的属性了。

3.4K30

阶段七:浏览器安全

恶意脚本注入方式 那么这些恶意脚本如何注入呢? 通常情况下,恶意注入脚本方式有三种:存储型XSS攻击、反射性XSS攻击基于DOMXSS攻击。...存储型XSS攻击 这个指的是劫持者正常访问网站,然后利用网站漏洞将一段恶意代码提交到网站数据库,然后别人访问这个上传恶意脚本页面的时候,一些信息被上传到恶意代码上传服务器。...服务器要对输入脚本进行过滤转码 充分利用CSP:限制加载其它源文件、禁止向第三方域提交数据、进行执行内敛脚本未授权脚本等 使用HttpOnly属性:使用这个属性主要是为保护Cookie安全,通过服务器...CSRF Token 类似于JWTtoken。 35 | 安全沙箱:页面系统之家隔离墙 浏览器架构是如何影响操作系统安全。...安全沙箱 主要是为了避免渲染进程中被劫持着搞破坏,而在渲染进程操作系统之家构建了一道墙,这样劫持者就获取不到渲染进程之外权限了,我们把这个将渲染进程操作系统隔离强称为安全沙箱

46130

再谈沙箱:前端所涉及沙箱细讲

沙箱或称沙盒,即sandbox,顾名思义,就是程序跑一个隔离环境下,不对外界其他程序造成影响,外界无法修改该环境内任何信息,沙箱东西单独属于一个世界,通过创建类似沙盒独立作业环境,在其内部运行程序并不能对硬盘产生永久性影响...沙箱设计目的是为了不可信代码运行在一定环境,从而限制这些代码访问隔离区之外资源。浏览器上JavaScript就是沙盒中执行,严格控制环境。沙箱将JavaScript与桌面世界隔离开来。...更严重是,它切断了JavaScript与Web服务器上所有内容联系,例如存储用户列表产品目录数据库以及运行业务逻辑服务器端代码。...你不能够模板表达式中试图访问用户定义全局变量。...总而言之:要解析或执行不可信JS时候,要隔离执行代码执行环境时候,要对执行代码可访问对象进行限制时候如何实现/使用沙箱实现沙箱最方便模式iframe,同理,也可以使用webWorker。

1.3K10

油猴脚本编写教程

今天我们就来看看如何编写自己油猴脚本。当然为了运行油猴脚本,你应该在浏览器安装油猴插件。 安装油猴插件 安装油猴插件非常简单,直接在浏览器扩展商店安装即可。...如果设置为none的话,则不使用沙箱环境,脚本会直接运行在网页环境,这时候无法使用大部分油猴扩展API。...后来发现太多了,做法其实很简单。每天先获取一次日期,然后事先保存日期比较,如果不一样的话才执行脚本,并将日期设置为今天日期;如果日期一样的话无事发生。...首先要思考脚本实现方式,需要用到什么API权限,然后填写好脚本注释信息。 然后将功能封装成函数形式,最后脚本末尾调用实现函数。写差不多时候复制到浏览器尝试运行。...油猴脚本支持好几个网站,其中目前最主流是GreasyFork,登录这个网站注册一个账号,然后进入用户页面选择提交脚本,然后填写脚本代码各项信息。

7K10

被低估 Deno

可以用 deno 做下一代沙箱么? Ryan 演讲,第二个 regret 是 Security,认为可能是 deno 相对于 node 做出最重要架构上重塑。...有没有一种技术,保证安全性隔离同时,冷启动时间足够短,执行效率足够高,还可以即时部署,即时更新? 有!这就是我们浏览器上跑了将近 30 年 javascript。...除安全外,v8 从诞生到现在一直琢磨就是如何 javascript 加载运行地更快一点。...于是乎,deno 看上去像是一个服务端 chrome。它用 isolate 隔离用户代码,并可以极短时间内加载并运行几乎不可能进行任何恶意行为用户代码(如果权限控制得当)。...这个沙箱可以用来做服务端客户端用户代码执行(比如插件),也可以创建一个多租户使用环境。 由 deno 想到未来软件开发场景... 互联网软件开发,对而言,最大痛点就在于部署。

1.1K30

作为面试官,为什么推荐微前端作为前端面试亮点?

候选人: 不是的,其实是我们把两个管理端合并,用户方便使用。...3.BEM命名规范隔离 qiankun如何实现父子项目间通信?如果你实现一套通信机制,你该如何实现?...通过动态加载,可以需要时异步地加载远程模块,并在加载完成后使用模块。 微前端应用可以实现模块共享动态加载,提供了更好代码复用可扩展性。...通过模块共享,可以避免重复加载代码冗余,而动态加载则可以按需加载模块,提高应用性能用户体验。...这个模块通常是一个包含子应用初始化代码函数,可以主应用调用以加载启动子应用。

68410

说说JS沙箱

沙箱,即sandbox,顾名思义,就是程序跑一个隔离环境下,不对外界其他程序造成影响,通过创建类似沙盒独立作业环境,在其内部运行程序并不能对硬盘产生永久性影响。 ...沙箱设计目的是为了不可信代码运行在一定环境,从而限制这些代码访问隔离区之外资源。 JS中沙箱使用场景 前端JS也会有应用到沙箱时候,毕竟有时候你要获取到是第三方JS文件或数据?...你不能够模板表达式中试图访问用户定义全局变量。 总而言之:当你要解析或执行不可信JS时候,当你要隔离执行代码执行环境时候,当你要对执行代码可访问对象进行限制时候,沙箱就派上用场了。...如何实现/使用沙箱 1、借助with + new Function 首先从最简陋方法说起,假如你想要通过evalfunction直接执行一段代码,这是不现实,因为代码内部可以沿着作用域链往上找,篡改全局变量...总结 即使我们知道了如何在开发过程中使用沙箱来让我们执行环境不受影响,但是沙箱也不一定是绝对安全,毕竟每年都有那么多黑客绞尽脑汁钻研出如何逃出浏览器沙箱nodejs沙箱,因此笔者个人建议: 1、业务代码上不执行不可信任第三方

2.5K30

一文彻底搞懂前端沙箱

沙箱能够安全执行不受信任代码,且不影响外部实际代码影响独立环境。 有哪些动态执行脚本场景?...一些应用,我们希望给用户提供插入自定义逻辑能力,比如 Microsoft Office VBA,比如一些游戏中 lua 脚本,FireFox 「油猴脚本」,能够用户发在可控范围权限内发挥想象做一些好玩...大多数都是一些客户端程序,一些在线系统产品也常常也有类似的需求,事实上,在线应用也有不少提供了自定义脚本能力,比如 Google Docs Apps Script,它可以你使用 JavaScript...与运行在「用户电脑中」客户端应用不同,用户自定义脚本通常只能影响用户自已,而对于在线应用或服务来讲,有一些情况就变得更为重要,比如「安全」,用户「自定义脚本」必须严格受到限制隔离,即不能影响到宿主程序...•处理数据结果公开给沙箱方法 进程间如何通讯,需要「动态代码」操作数据后可以直接序列化然后通过 IPC 发送给隔离 Sandbox 进程,执行结果一样经过序列化通过 IPC 传输。

1.8K20

微前端学习笔记(3):前端沙箱之JavaScriptsandbox(沙盒沙箱

沙箱(Sandbox)是一种安全机制,目的是程序运行在一个相对独立隔离环境,使其不对外界程序造成影响,保障系统安全。...作为开发人员,我们经常会同沙箱环境打交道,例如,服务器中使用 Docker 创建应用容器;使用 Codesandbox运行 Demo示例;程序创建沙箱执行动态脚本等。...由于Workers代码另一个全局上下文中执行,因此可以被看作是沙盒执行环境。... iframe 运行脚本程序访问到全局对象均是当前 iframe 执行上下文提供,不会影响其父页面的主体功能,因此使用 iframe 来实现一个沙箱是目前最方便、简单、安全方法。...沙盒实现具体代码实现(核心思路是通过 with 块 Proxy 对象来隔离执行环境,确保执行代码只能访问到沙盒内变量。

16810
领券