精华内容
下载资源
问答
  • Web前端JS代码需要保护吗? 这得具体情况具体分析。 1、如果只是写一段web页面图片轮播,或是跑马灯效果等等之类简单的功能。那不需要保护。 2、如果是精心设计一个绚丽的特效,如果想要保护这段自己付诸幸苦实现...

    Web前端JS代码需要保护吗?
    这得具体情况具体分析。
    1、如果只是写一段web页面图片轮播,或是跑马灯效果等等之类简单的功能。那不需要保护。
    2、如果是精心设计一个绚丽的特效,如果想要保护这段自己付诸幸苦实现的特效代码不被他人随意拿去使用,那应该保护这段JS代码!
    3、如果页面上有重要的功能是用JS代码管控的,比如交易逻辑、帐号密码信息、个人隐私、甚至有与远程服务器或数据库的通信等等,那么相关的js代码非常应该被保护、应该做JS代码防盗保护!
    否则可能引起被黑客分析、攻击等严重问题。安全相关的事情,从来都要防患于未然、不可心存侥幸。除非它对你毫不重要。

    这里写图片描述

    如何保护Web前端JS代码?
    1、打包&压缩
    有人认为打包、压缩就是对JS代码的保护。确实,打包在一定程度上可以起码些许保护作用,好像看起来是如此。但打包、压缩的目的并不是为了保护JS代码,而是为了使用方便、减小代码体积,方便使用、便于传输。比如模块化的编程可能产生200个JS文件,如果使用时逐一用“script src”进行引用……这是种折磨,不管是对于代发人员,还是网络加载(浏览器也会生气!x_x)。
    类似Webpacket、Gulp进行打包,可以将这些多个JS合成到一个文件,并且可能会进行回车、换行、空格的删除,以实现代码压缩,也有一些简单混淆操作:把长变量名改为统一风格的短变量名等。然后,最终生成的一个文件。代码总量减小了、可读性差了、使用方便了。同时让有些人认为这也实现了JS代码保护。其实、实际上、当然的代码并没有被保护:可读性依旧,只是代码量大了一些而已,只要稍稍耐心的读代码,会发现,代码依然是很易理解的,没有多少安全性可言。
    2、混淆&加密
    前端JS代码的保护,必需要混淆和加密共用。
    单独的JS源代码加密,是行不通的,更不可能有所谓的JS不可逆加密。因为代码在浏览器端执行时,必须转解密还原成原始代码,才能被浏览器的JS引擎识别和运行。在解密后,会存在完整的原始JS代码。这是非常不安全的存在,有多种方法可将原始的JS代码显示出来。
    JS代码混淆被不少开发人员认为是不够高端的JS代码保护方式,听起来不如JS源码加密更具安全性。事实上,混淆也有多个级别。比如比较低端的字符搜索和串替换、随机插入伪僵尸代码、字符串十六进制化等等。而也有高端的手法,会先进行语法分析、词法分析,重建语法树,相当于已经实现了一个JS引擎,在引擎中处理代码,那么,就可以在其中任意一步进行自由度极高的操作,比如在语法树中插入新的语法结构、比如可以将字符串全部提取并进行加密、可以对变量进行整体有规则化的重定义使无意义化等等。这样就可以实现真正的代码重建。这样重建的JS代码安全性,将会有一个质的提升。
    当正真的混淆和加密联合使用,如JShaman JS保护,这里写图片描述 可以实现真正的JS代码安全保护。JS混淆中融入JS加密,JS加密中又嵌入JS混淆。这样保护后的代码,即使在客户端执行环境中被逆向还原,得到的也是大量含义不明的函数、代码、字符串。特别重点是:代码已经经过了重建,这时逆向得到的也是分离后的重建的无意义JS代码、大量的僵尸代码、混淆的字符串、不明含意的变量。可读性与原始代码相比……天壤之别。
    固执的人或许还会说:没有破解不了的保护方案,只要我认真、用心、用时的分析,还是能分析出原始代码含意的,确实,可能如此。
    但是,原本的代码,可能只需要读10分钟,而从这样保护后的JS代码读取原始含意,可能需要……10个月。而这时候,我们的JS代码可能已经更新到下一版了。
    JS代码保护的目的已经达到了,不是吗?

    展开全文
  • Python如何执行JS代码

    万次阅读 2019-05-11 18:12:47
    Python如何调用JS代码

    前言

    爬虫的开发过程中,往往需要对JS进行模拟,简单或者通用的还可以在Python中模拟或者找到对应的第三方库,但是复杂的就可能不好实现了。所以Python执行JS语句就是爬虫开发过程中的一个痛点,而能执行JS语句的第三方库常见的有selenium、execjs、PyV8

    selenium

    参考文章:爬虫的一个重要的第三方库:Selenium

    execjs

    安装

    • 打开CMD控制台输入命令pip install PyExecJS

    方法

    eval()

    • 输入参数:source(JS语句)、cwd(路径)
    • 返回值:result(语句执行结果)

    compile()

    • 输入参数:source(JS语句)、cwd(路径)
    • 返回值:编译后的对象

    call()

    • 输入参数:name(要调用的JS方法名称)、*args(方法所需要的参数,可多个)
    • 返回值:result(运行方法的返回结果)

    模板

    • 执行JS语句
      import execjs
      result=execjs.eval("1+1")
      print(result)
      
    • 调用JS方法
      import execjs
      js=execjs.compile('''function sum(i,j){sum=i+j;return sum}''')
      result=js.call('sum',1,2)
      print(result)
      

    我的个人博客网站是:www.coderyyn.cn
    上面会不定期分享有关爬虫、算法、环境搭建以及有趣的帖子
    欢迎大家一起交流学习

    转载请注明

    展开全文
  • 深入JavaScript之JS引擎如何执行JS代码

    千次阅读 多人点赞 2021-04-20 12:09:34
    js引擎在执行js代码时,也会从上到下进行 词法分析、语法分析、语义分析 等处理,并在代码解析完成后生成AST(抽象语法树),最终根据AST生成CPU可以执行的机器码并执行。 除此之外,JS引擎在执行代码时还会进行其它...

    我们大概经常能听到“执行环境”、“作用域”、“原型(链)”、“执行上下文”等内容,它们都在描述什么?

    JS代码的运行

    我们知道了js是弱类型语言,在运行时才确定变量类型。js引擎在执行js代码时,也会从上到下进行 词法分析语法分析语义分析 等处理,并在代码解析完成后生成AST(抽象语法树),最终根据AST生成CPU可以执行的机器码并执行。

    除此之外,JS引擎在执行代码时还会进行其它处理,如 V8 中还有两个阶段:

    • 编译阶段:该阶段会进行执行上下文的创建,包括创建变量对象(VO)(此时会被初始化为undefined)、建立作用域链、确定 this 指向等。每进入一个不同的运行环境。V8 都会创建一个新的执行上下文。
    • 执行阶段:将编译阶段中创建的执行上下文压入调用栈,并成为正在运行的执行上下文。代码执行结束后,将其弹出调用栈。(这里有一个VO - AO的过程:JavaScript对变量赋值时变量被用到,此时变量对象会转为活动对象,转换后的活动对象才可被访问)

    这就引出了两个概念:“执行上下文” 和 “作用域链”。


    JavaScript执行上下文

    由上面我们可以知道:当js代码执行一段可执行代码时,会创建对应的执行上下文。
    首先,js中可执行代码对应着有一个概念:“执行环境” —— 全局环境、函数环境 和 eval
    其次,对于每个执行上下文,都有三个重要属性:

    • 变量对象(即“VO”)
    • 作用域链
    • this

    我们来看两段代码:

    var scope="global scope";
    function checkscope(){
    	var scope="local scope";
    	function f(){
    		return scope;
    	}
    	return f();
    }
    checkscope();
    
    var scope="global scope";
    function checkscope(){
    	var scope="local scope";
    	function f(){
    		return scope;
    	}
    	return f;
    }
    checkscope()();
    

    它们会打印什么?
    scope

    为什么?答案是它们的执行上下文栈不一样!

    什么是“执行上下文栈”?
    当执行一个可执行代码时,就会提前做准备工作,这里的“准备工作”,专业的说法就是“执行上下文”。但随着可执行代码如函数的增多,如何管理那么多的执行上下文呢?所以JS引擎创建了执行上下文栈的概念。
    我们完全可以用数组去模拟其行为(栈底永远有一个全局执行上下文globalContext)

    我们定义一个EStack,首先

    EStack=[globalContext];
    

    然后来模拟第一段代码:

    EStack.push(<checkscope> functionContext);
    EStack.push(<f> functionContext);
    EStack.pop();
    EStack.pop();
    

    而第二段代码是这样的:

    EStack.push(<checkscope> functionContext);
    EStack.pop();
    EStack.push(<f> functionContext);
    EStack.pop();
    

    究其原因,你可能需要先研究一下“闭包”的概念了!

    这里顺便说下“在前端模块化”中怎么实现“长时间保存数据”?
    缓存?不。闭包!


    JavaScript作用域和作用域链

    首先,作用域是指程序中定义变量的区域。作用域规定了如何查找变量,也就是确定了当前执行代码对变量的访问权限。
    作用域有两种:静态作用域动态作用域
    JS采用的静态作用域,也叫“词法作用域”。函数的作用域在函数定义的时候就确定了。

    由上,词法作用域中的变量,在编译过程中会产生一个确定的作用范围。这个作用范围即“当前的执行上下文”。在ES5后我们用“词法环境”替代作用域来描述该执行上下文。词法环境由两个成员组成:

    • 自身词法环境记录:用于记录自身词法环境中的变量对象
    • 外部词法环境引用:用于记录外层词法环境中存在的引用

    我们依然来看一个例子:

    var value=1;
    function foo(){
    	console.log(value);
    }
    function bar(){
    	var value=2;
    	foo();
    }
    bar();
    

    回看上面的定义,该打印什么?

    value

    让我们分析下执行过程:
    执行foo()函数,先从foo函数内部查找是否有局部变量value。如果没有,就根据定义时的位置,查找上面一层的代码,也就是value=1.所以结果会打印1。

    这里面当然不是如此简单能概括的,你可以从执行上下文的角度分析一下。

    建立作用域链

    上面我们说了词法环境(作用域)的两个组成。再结合执行上下文,我们不难发现:通过外部词法环境的引用,作用域可以顺着栈层层拓展,建立起从当前环境向外延伸的一条链式结构。

    再来看一个例子:

    function foo(){
    	console.dir(bar);
    	var a=1;
    	function bar(){
    		a=2;
    	}
    }
    console.dir(foo);
    foo();
    

    由静态作用域,全局函数foo创建了一个自身对象的 [[scope]] 属性

    foo[[scope]]=[globalContext];
    

    而当我们执行foo()时,也会先后进入foo函数的定义期和执行期。在foo函数的定义期时,函数bar的 [[scope]] 将会包含全局内置scope和foo的内置scope

    bar[[scope]]=[fooContext,globalContext];
    

    这证明了这一点:“JS会通过外部词法环境引用来创建变量对象的一个作用域链,从而保证对执行环境有权访问的变量和函数的有序访问。”

    让我们再回头看看执行上下文中的那道题,在前面我们说了它们有什么不同,这里说下为什么它们相同地打印了“local scope”:还是那句话“JS采用的是词法作用域,函数的作用域取决于函数创建的位置” —— JS函数的执行用到了作用域链,这个作用域链是在函数定义的时候创建的。嵌套的函数 f() 定义在这个作用域链里,其中的变量scope一定是指局部变量,不管何时何地执行 f() ,这种绑定在执行 f() 时依然有效。

    基于作用域链的变量查询

    当某个变量无法在自身词法环境记录中找到时,可以根据外部词法环境引用向外层进行寻找,直到最外层的词法环境中外部词法环境引用为null
    与此相似的是“对象中基于原型链的查找”:

    • 原型:每一个JS对象(null 除外)在创建时就会与另一个对象关联,这个对象就是我们说的原型。每一个对象都会从原型中“继承”属性。
    • 当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还找不到,就去找原型的原型,一直到最顶层(__proto__为null)为止

    它们的区别也显而易见:原型链是通过 prototype 属性建立对象继承的链接;而作用域链是指内部函数能访问到外部函数的闭包。不管直接还是间接,所有函数的作用域链最终都链接到全局上下文。

    展开全文
  • MyEclips中JS代码提示插件(spket)

    千次下载 热门讨论 2014-05-12 16:56:41
    MyEclips中JS代码提示插件(spket)MyEclips中JS代码提示插件(spket)MyEclips中JS代码提示插件(spket)
  • python执行js代码

    千次阅读 2019-05-27 19:38:39
    使用js2py来执行 这是第三方库,需要安装 pip install js2py 代码演示执行js代码 import js2py js_code = "console.log('hello world')" ...# 把js代码转换为python代码,只限于简单js代码 js_code2 = ''' funct...

    使用js2py来执行

    这是第三方库,需要安装
    pip install js2py

    代码演示执行js代码

    import js2py
    
    
    js_code = "console.log('hello world')"
    js2py.eval_js(js_code)      # 直接执行js代码
    
    
    # 把js代码转换为python代码,只限于简单js代码
    js_code2 = '''
        function add(a, b) {
            return a + b;
        }
    '''
    add = js2py.eval_js(js_code2)
    print(add(11, 22))
    
    
    
    # 推荐使用
    js_code3 = '''
        var num1 = 1;
        var num2 = 2;    
        function demo() {
            console.log("Hello World")
        }
    '''
    js = js2py.EvalJs()             # 生成一个js解释器
    js.execute(js_code3)            # 使用js解释器来执行js代码
    print(js.num1)
    print(js.num2)
    js.demo()
    

    控制台输出结果

    在这里插入图片描述

    展开全文
  • JS代码中打断点

    万次阅读 多人点赞 2018-04-24 17:19:04
    第一步,在你的JS代码里面加上debugger,像下面展示的那样。 var $standardmoneynameType = $('#standardmoneyname').combobox({ panelHeight: 'auto', valueField: 'id', prompt: CLIENT_COMMON_I18N.lab_please...
  • js代码大全

    千次阅读 2019-06-12 15:50:00
    js代码大全 https://www.cnblogs.com/cherry1990/p/4038403.html
  • js代码执行顺序

    千次阅读 2018-10-24 00:40:19
    一、引入 ​ 我们都知道js是一种单线程的脚本语言,但是有时...​ 首先明确一点,js代码一定是单线程的,同一时间,不可能同时运行两个js代码。我们一直说的异步,并不是js的异步而是浏览器的异步。 一些I/O操作、定...
  • 如何直接执行js代码

    万次阅读 热门讨论 2017-12-10 19:12:05
    我们常见的执行js代码都是放入到HTML引入后然后通过HTML文件来执行胡查看代码,显然这是比较麻烦的事情, 如果你的电脑里面安装了node.js,你可以使用node来直接使用node来运行你想要运行的js文件, 具体的操作如...
  • python调用js代码

    千次阅读 2018-11-06 11:23:57
    记录python调用js代码 第一步:test.js 将你的js代码复制进js文件中 function enString(data){ var key1 = &quot;ABC&quot;; #模拟数据 var key2 = &quot;FGE&quot;; #模拟数据 var key3 = &...
  • IDEA格式化js代码

    万次阅读 2018-09-30 11:22:56
    1.在IDEA》Settings》Keymap 里面,搜索关键字“format code” 2.找到格式化代码的快捷键 :Ctrl+Alt+L (注意这里是大写的L) ...3.打开需要格式化的js代码,输入快捷键组合,js代码就会被格式化了 ...
  • intellij idea javaee项目js代码改变后,重新运行后,js代码,还是和以前一样,用的tomcat服务器
  • 里面包含了所有前台加密的js代码。 像AES.JS,Md5.js等,方便那些上不了谷歌的人下载。
  • 请教下面这段JS代码怎么解密,怎么把普通JS加密成这样的代码(会的可以加QQ 1523656692教会我即可,有偿。JS代码在这个链接里面[http://210.56.53.152/js.js](http://210.56.53.152/js.js "需要加密和解密的代码")
  • javaScript-如何引入js代码

    万次阅读 热门讨论 2019-08-20 20:37:52
    javaScript-如何引入js代码 直接po代码和截图 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>js01-如何引入js代码</title> <script type="text/...
  • 如何压缩JS代码

    千次阅读 2019-06-04 11:08:32
    那么要压缩自己的JS代码要怎么做呢? 把如何压缩JS代码作为第二个例子,是因为我以前在刚开始学习前端知识的时候就疑惑什么事生产版和开发版~新童鞋可以先了解,后理解。 使用UglifyJS压缩JS代码 1、创建一个命名为...
  • 简单测试JS代码

    千次阅读 2018-07-31 21:41:04
    背景 由于JS程序不能像C++、Python程序等单独运行,不利于测试一段代码的功能 ...简单测试一小段JS代码 步骤 (1)新建一个test.html文件 (2)在test.html文件中书写以下内容 &lt;!doctype html&...
  • 解决MyEclipse2013 JS代码块背景是白色 更改MYECLIPSE JS 代码背景颜色 关于更改MYECLIPSE JS 代码背景颜色 白色的背景,看花了眼,你想改一下编辑器的背景颜色,移步这里就可以了 这时你高兴的打开...
  • js代码无法执行

    千次阅读 2018-04-08 13:34:22
    1、首先F12看看有没有js错误,有的话改正。2、检查网页的标签是不是存在没有闭合等问题。...如果还是不行,试试下面方法1、js的引入这样 &lt;script type="text/javascript"...2、js代码都放到网...
  • Eclipse格式化js代码

    千次阅读 2018-12-17 11:02:20
    最近遇到Eclipse格式化js代码,代码自动换行,感觉挺难看的 1.js代码格式化前 2.发现Line 默认设置是80,Window–Preferences–JavaScript–Code Style–Formatter–New–Profile name(输入名字)–点击OK 3.点击...
  • 使用js的混淆加密,其目的是为了保护我们的前端代码逻辑,对应一些搞技术吃饭的公司来说,为了防止被竞争对手抓取或使用自己的代码,就会考虑如何加密,或者混淆js来达到代码保护。 1、为什么需要js混淆 在web系统...
  • 很多时候,我们需要写一小块js代码或js脚步,进行部分功能的测试和验证,那么在线JS代码调试工具将大大方便我们在这方面的测试和验证。2、JSFiddle 简介 JSFiddle官网:https://jsfiddle.net JSFiddle:在线JS代码...
  • 简单js代码封装

    千次阅读 2018-07-30 15:04:53
    简单js代码封装 关于代码封装,首先举一个常见的例子 function test() { this.name='test'; this.getname=function(){ console.log(this.name) } } var T=new test();//创建实例化对象 console.log(T.name);//调用...
  • 一、格式化JS代码 1. Windows -> Preferences -> JavaScript -> Code Style -> Formatter -> New.. 2.创建新的模板: 3. 设置参数: 二、格式化HTML代码 步骤: 在左侧快捷 “搜索” 框...
  • WebView 无法执行js代码

    千次阅读 2016-10-08 16:30:50
    WebView 无法执行js代码
  • JS代码的加密混淆

    千次阅读 2019-07-03 11:46:52
    为什么要加密混淆JS代码 ,因为业务需求。。。。。。 那怎么开始加密和混淆JS呢 下面有链接 地址:http://www.moralsoft.com/jso-online/hdojso.htm 想要具体了解加密混淆JS 可看:...
  • Angular4中调用js代码

    万次阅读 热门讨论 2017-06-24 22:31:24
    Angular4中调用js代码 引言:Angular2开始采用TypeScript进行编码。本文讲述如何在Angular4项目中调用原生的 js 代码。 本文代码: http://git.oschina.net/mingyueyixi/angular4-usejs代码使用环境:webstrom ...
  • js代码调用chrome打印

    千次阅读 2019-07-17 17:34:51
    js代码调用chrome打印 之前代码写过打印,结果太长没有记录导致这次找的时候非常麻烦。写篇博客记录一下。 页面可以直接调用,如下 <button class=“btn btn-success” οnclick=“window.print()”>打印 用...
  • js代码转vue

    千次阅读 2017-08-01 14:44:25
    js代码 div class="jumbotron"> h1 id="step1">HTML in tooltiph1> p id="step4" class="lead">We're going to use HTML codes in tooltips via Programmatic APIp> a class="btn btn-large btn-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 318,911
精华内容 127,564
关键字:

js代码