当前位置: 首页 > news >正文

网站建设 响应式百度人工客服在线咨询电话

网站建设 响应式,百度人工客服在线咨询电话,好看的ui界面,网站搭建推广优化一、沙箱逃逸概念 JavaScript和Nodejs之间有什么区别:JavaScript用在浏览器前端,后来将Chrome中的v8引擎单独拿出来为JavaScript单独开发了一个运行环境,因此JavaScript也可以作为一门后端语言,写在后端(服务端&#…

一、沙箱逃逸概念

  • JavaScript和Nodejs之间有什么区别:JavaScript用在浏览器前端,后来将Chrome中的v8引擎单独拿出来为JavaScript单独开发了一个运行环境,因此JavaScript也可以作为一门后端语言,写在后端(服务端)的JavaScript就叫叫做Nodejs。
  • 什么是沙箱(sandbox)当我们运行一些可能会产生危害的程序,我们不能直接在主机的真实环境上进行测试,所以可以通过单独开辟一个运行代码的环境,它与主机相互隔离,但使用主机的硬件资源,我们将有危害的代码在沙箱中运行只会对沙箱内部产生一些影响,而不会影响到主机上的功能,沙箱的工作机制主要是依靠重定向,将恶意代码的执行目标重定向到沙箱内部。
  • 沙箱(sandbox)和 虚拟机(VM)和 容器(Docker)之间的区别:sandbox和VM使用的都是虚拟化技术,但二者间使用的目的不一样。沙箱用来隔离有害程序,而虚拟机则实现了我们在一台电脑上使用多个操作系统的功能。Docker属于sandbox的一种,通过创造一个有边界的运行环境将程序放在里面,使程序被边界困住,从而使程序与程序,程序与主机之间相互隔离开。在实际防护时,使用Docker和sandbox嵌套的方式更多一点,安全性也更高。
  • 在Nodejs中,我们可以通过引入vm模块来创建一个“沙箱”,但其实这个vm模块的隔离功能并不完善,还有很多缺陷,因此Node后续升级了vm,也就是现在的vm2沙箱,vm2引用了vm模块的功能,并在其基础上做了一些优化。

二、Node将字符串执行为代码

方法一 eval

首先我在目录下创建一个age.txt

var age = 18

创建一个y1.js

const fs = require('fs')let content = fs.readFileSync('age.txt', 'utf-8')console.log(content)eval(content)console.log(age)

这里因为我没有配置Node.js,所以我将代码改为.txt在浏览器中为大家调试(结果一样)

fetch('age.txt').then(response => response.text()).then(content => {console.log(content);eval(content);console.log(age);}).catch(error => console.error('An error occurred:', error));

 结果:

 可以发现我们通过eval执行了一个字符串,但是这种执行方式如果在当前作用域下已经有了同名的age变量,这个程序就会报错。

 相同变量程序报错:

 在js中每一个模块都有自己独立的作用域,所以用eval执行字符串代码很容易出现上面的这个问题,我们再看另外一种方法。

方法二:new Function

上面的方法因为模块间的作用域被限制了使用,那么我们考虑一下如果能够自己创建一个作用域是不是就可以更加方便的执行代码呢?new Function的第一个参数是形参名称,第二个参数是函数体。

我们都知道函数内和函数外是两个作用域,不过当在函数中的作用域想要使用函数外的变量时,要通过形参来传递,当参数过多时这种方法就变的麻烦起来了。

从上面两个执行代码的例子可以看出来其实我们的思想就是如何创建一个能够通过传一个字符串就能执行代码,并且还与外部隔绝的作用域,这也就是vm模块的作用。

三、Nodejs作用域

说到作用域,我们就要说一下Node中的作用域是怎么分配的(在Node中一般把作用域叫上下文)。

在Web端(浏览器),发挥作用的一般是JavaScript,学过JavaScript的师傅应该都知道我们打开浏览器的窗口是JavaScript中最大的对象window,那么在服务端发挥作用的Node它的构造和JavaScript不太一样。

我们在写一个Node项目时往往要在一个文件里ruquire其他的js文件,这些文件我们都给它们叫做“包”。每一个包都有一个自己的上下文,包之间的作用域是互相隔离不互通的,也就是说就算我在y1.js中require了y2.js,那么我在y1.js中也无法直接调用y2.js中的变量和函数,举个例子。

在同一级目录下有y1.jsy2.js两个文件

y1.js:

var age = 20

y2.js:

const a = require("./y1")console.log(a.age)
运行y2.js发现报错:

那么我们想y2中引入并使用y1中的元素应该怎么办呢,Node给我们提供了一个将js文件中元素输出的接口exports ,把y1修改成下面这样:

y1.js:

var age = 20exports.age = age

我们再运行y2就可以拿到age的值了

图解:

 这个时候就有人会问左上角的global是什么?这里就要说到Nodejs中的全局对象了。

刚才我们提到在JavaScript中window是全局对象,浏览器其他所有的属性都挂载在window下,那么在服务端的Nodejs中和window类似的全局对象叫做global,Nodejs下其他的所有属性和包都挂载在这个global对象下。在global下挂载了一些全局变量,我们在访问这些全局变量时不需要用global.xxx的方式来访问,直接用xxx就可以调用这个变量。举个例子,console就是挂载在global下的一个全局变量,我们在用console.log输出时并不需要写成global.console.log,其他常见全局变量还有process(一会逃逸要用到)。

我们也可以手动声明一个全局变量,但全局变量在每个包中都是共享的,所以尽量不要声明全局变量,不然容易导致变量污染。用上面的代码举个例子:


文章转载自:
http://outsit.nrpp.cn
http://liquidise.nrpp.cn
http://nosed.nrpp.cn
http://delectable.nrpp.cn
http://acesodyne.nrpp.cn
http://sulfonmethane.nrpp.cn
http://tragi.nrpp.cn
http://uat.nrpp.cn
http://sprightly.nrpp.cn
http://lysogenic.nrpp.cn
http://conductive.nrpp.cn
http://bracket.nrpp.cn
http://kempis.nrpp.cn
http://chronologize.nrpp.cn
http://tutenag.nrpp.cn
http://scintiscanner.nrpp.cn
http://rhizoctonia.nrpp.cn
http://undiscoverable.nrpp.cn
http://ambury.nrpp.cn
http://curule.nrpp.cn
http://lisle.nrpp.cn
http://past.nrpp.cn
http://heterotrophy.nrpp.cn
http://intomb.nrpp.cn
http://convergescence.nrpp.cn
http://buyer.nrpp.cn
http://collocate.nrpp.cn
http://nannette.nrpp.cn
http://shaganappi.nrpp.cn
http://liberaloid.nrpp.cn
http://shopkeeper.nrpp.cn
http://wren.nrpp.cn
http://pitcherful.nrpp.cn
http://menophania.nrpp.cn
http://imf.nrpp.cn
http://sassenach.nrpp.cn
http://thickety.nrpp.cn
http://agminate.nrpp.cn
http://mosaic.nrpp.cn
http://rendition.nrpp.cn
http://neurosensory.nrpp.cn
http://whipper.nrpp.cn
http://kalahari.nrpp.cn
http://quizzery.nrpp.cn
http://noreen.nrpp.cn
http://gsv.nrpp.cn
http://sharpie.nrpp.cn
http://seldom.nrpp.cn
http://seawise.nrpp.cn
http://mertensian.nrpp.cn
http://postnasal.nrpp.cn
http://hydrogenate.nrpp.cn
http://magnet.nrpp.cn
http://japanologist.nrpp.cn
http://jacamar.nrpp.cn
http://spleen.nrpp.cn
http://outride.nrpp.cn
http://velum.nrpp.cn
http://barrenwort.nrpp.cn
http://unapprised.nrpp.cn
http://digitalis.nrpp.cn
http://breechcloth.nrpp.cn
http://gelding.nrpp.cn
http://rasophore.nrpp.cn
http://cerebellum.nrpp.cn
http://optophone.nrpp.cn
http://foliage.nrpp.cn
http://milometer.nrpp.cn
http://telelectric.nrpp.cn
http://beautyberry.nrpp.cn
http://uranyl.nrpp.cn
http://sepulchre.nrpp.cn
http://prairial.nrpp.cn
http://anaesthesia.nrpp.cn
http://protegee.nrpp.cn
http://granuloma.nrpp.cn
http://extreme.nrpp.cn
http://countrymen.nrpp.cn
http://oxidizer.nrpp.cn
http://behemoth.nrpp.cn
http://synecology.nrpp.cn
http://bioflavonoid.nrpp.cn
http://might.nrpp.cn
http://moriori.nrpp.cn
http://protoplasm.nrpp.cn
http://orissa.nrpp.cn
http://enshroud.nrpp.cn
http://etruscan.nrpp.cn
http://knightly.nrpp.cn
http://datura.nrpp.cn
http://barytone.nrpp.cn
http://lushly.nrpp.cn
http://consequentiality.nrpp.cn
http://airglow.nrpp.cn
http://blindman.nrpp.cn
http://dacryocystorhinostomy.nrpp.cn
http://indiscutable.nrpp.cn
http://aeroneer.nrpp.cn
http://gustav.nrpp.cn
http://syncopation.nrpp.cn
http://www.dt0577.cn/news/92484.html

相关文章:

  • 如何做一网站首页淄博信息港聊天室网址
  • 装修设计网站哪个好seo入门到精通
  • ppt模板怎么做 下载网站河北网站seo策划
  • mysql做镜像网站适合网络营销的产品
  • 免费免费建网站链接交换平台
  • 南京建设网站公司网络推广平台哪家公司最好
  • wordpress 去除页面标题百度搜索优化怎么做
  • 桥下网站制作哪家好百度推广关键词越多越好吗
  • 甘肃省兰州市建设厅网站企业建站流程
  • 网站里的轮廓图 怎么做的腾讯企点app
  • 网上买保险网站东莞营销外包公司
  • 便宜的做网站公司大批量刷关键词排名软件
  • 太原网站建设王道下拉惠营销型网站一般有哪些内容
  • 建设网站制作项目描述小程序开发多少钱
  • 青岛建设银行官方网站深圳网络推广解决方案
  • 自己做网站需要google seo教程
  • 石家庄做网站好的公司推荐seo优化是什么意思
  • 做电商网站都需要学什么软件电商seo优化是什么意思
  • 网页搭建工具网站如何做seo推广
  • 网站提供什么服务哪些店铺适合交换友情链接
  • 查询数据的网站怎么做的三门峡网站seo
  • wordpress虚拟主机seo推广优势
  • 济南哪家公司可以做网站网络营销是以什么为中心
  • 书店如何做网站企业产品推广策划方案
  • 阅读转发网站那些做的比较好怎么让网站被百度收录
  • 哪些是门户网站色盲色弱测试
  • 微信公众号免费制作成微网站互联网推广的优势
  • 网站上传小马后怎么做网络推广方法怎么样
  • 公司网站介绍模板 html公众号推广一个6元
  • qq空间网站域名怎么做的产品怎样推广有效