我们描述了一个名为 Jalangi 的工具框架,用于 JavaScript 程序的动态分析和符号执行测试。该框架是用 JavaScript 编写的,允许对 JavaScript 进行各种重载动态分析。Jalangi 包含两个关键技术:1)选择性录制回放,这是一种能够录制并准确地回放用户选择的程序部分的技术;2)阴影值和阴影执行,可以轻松实现重量级动态分析,例如,condicolic 测试和污点跟踪。Jalangi 通过对源代码注入进行检测,这使得它可以实现跨平台移植。根据 Apache 2.0 许可,可以从https://github.com/SRA-SiliconValley/jalangi获得Jalangi。我们在SunSpider基准套件和五个Web应用程序上对Jalangi的评估表明,Jalangi在录制过程中的平均速度降低了26倍,在重放和分析过程中的速度平均降低了30倍。与类似工具(如PIN和针对x86二进制文件的Valgrind)报告的类似情况相比,速度的降低是可比的。
JavaScript;动态分析;符号执行测试
JavaScript 是编写客户端 web 应用程序的首选语言,并且在编写移动应用程序(例如用于 Tizen OS 和 iOS)、桌面应用程序(如 Windows 8 和 Gnome 桌面应用程序)和服务器端应用程序(如 node.js)时越来越流行。但是,针对 JavaScript 应用程序的分析、测试和调试的工具较少。我们已经开发了一个简单而强大的框架,称为 Jalangi,用于为 JavaScript 编写重载动态分析。本文简要介绍了该框架及其使用场景。该框架提供了一些有用的抽象和 API,大大简化了 JavaScript 动态分析的实现。关于 Jalangi 背后的技术的详细描述可以在[6]中找到。
Jalangi 可以在任何浏览器或 node.js 上工作。我们通过选择性的源代码检测来实现浏览器的独立性。即使某些源文件没有检测,Jalangi 也可以运行。对 Jalangi 的分析分两个阶段进行。在第一阶段中,在用户选择的平台(如 Android 上运行的 mobile chrome)上执行并录制一个插入指令的 JavaScript 应用程序。在第二阶段中,录制的数据用于在桌面环境中执行用户指定的动态分析。
Jalangi 允许通过支持阴影值和阴影执行轻松实现动态分析。阴影值使我们能够将阴影值与程序中使用的任何值相关联。在 Jalangi 中,我们使用阴影值和执行实现了几个动态分析:1)共同语言测试,2)纯符号执行,3)跟踪 null 和 undefined 的来源,4)检测可能的类型不一致,5)简单的对象分配分析器,6)简单的动态污染分析。
我们提供了 Jalangi 的技术细节概要。有关更详细的技术讨论,请参阅[6]。用户标识由 Jalangi 检测的 web 应用程序的一个子集,以便录制和回放。在录制阶段,将在用户选择的平台上执行生成的检测代码。即使使用了用户代码的子集,整个应用程序也会在录制阶段执行,包括已插入和未插入 JavaScript 代码以及本机代码。但是,在回放阶段,Jalangi 仅回放已检测的代码。Jalangi 具有在用户平台上完整执行 JavaScript 应用程序的功能,使录制的执行可以在开发笔记本电脑/台式机 JavaScript 引擎上进行调试,以进行调试,包括移动浏览器和基于 node.js 的系统,或具有嵌入式 JavaScript 引擎的集成开发系统。这种方法还支持使用支持阴影执行的底层阴影值实现动态分析。
通过录制执行期间从内存加载的每个值,并在回放期间在相关内存加载期间重新使用它们,可以有效地提供录制和回放。这种方法虽然听起来不错,但也存在一些挑战,例如:(1)如何有效地录制函数和对象?(2) 如何在未检测本机函数(例如,JavaScript 事件 dispather)调用检测函数时提供回放?通过提供间接记录(其中唯一的数字标识符与每个对象和功能相关联)以及记录这些标识符的值来解决第一个问题。第二个问题通过显式录制和调用已检测功能来解决,这些功能又从未插入代码中调用,或者由于 JavaScript 事件处理程序调度而执行。
此外,我们还观察到,回放期间的内存负载值可以通过执行检测代码来计算,而无需录制所有内存负载的值。通过仅记录必要的内存负载,这用于提高 Jalangi 的效率。为了确定是否必须记录内存负载的值,Jalangi 在记录阶段跟踪影子内存,该影子内存将在执行实际代码时随实际内存一起更新。 执行本机和未执行的代码不会对影子内存进行更新。为了确保在重放阶段可以使用正确的值,只有在记录阶段在内存位置存储的值存在差异时(例如,如果在内存位置的值之间存在差异),Jalangi 才会存储内存负载的值。 实际加载的内存及其关联值存储在影子内存中)。
在 Jalangi 中,在回放阶段执行中使用的任何值都可以替换为带注释的值,该值可以为实际使用的值提供附加信息。例如,支持污染分析所需的额外污染信息,或者可能是与符号执行中的实际值相关的信息,这些信息可以以符号表达式的形式提供。Jalangi 使用 concolvalue 类型的对象来表示带注释的值。
在 Jalangi,我们进行了以下动态分析:
Jalangi 可在https://github.com/SRA SiliconValley/Jalangi 上获得。我们已经用 JavaScript 实现了 Jalangi。
Jalangi 通过检测 JavaScript 代码进行操作。表 3 显示了在表 1 中插入代码后获得的代码。在检测期间,Jalangi 从 Jalangi 库插入各种回调函数。回调函数列在表 2 中。这些函数在 JavaScript 中包装了各种操作。Jalangi 的选择性录制重放引擎是通过定义这些回调函数来实现的。
Jalangi 将工具库公开为函数工具代码。这也使我们能够动态地测试在运行时创建和计算的任何代码。例如,我们将对 eval(s)的任何调用修改为 eval(instrumentCode(s))。
我们在 JavaScript-SunSpider(http://www.webkit.org/perf/SunSpider/SunSpider.html)基准套件中的26个程序和使用HTML5/JavaScript为Tizen操作系统编写的5个web应用程序上运行了Jalangi的录制回放。(https://developer.tizen.org/下载/示例web应用程序)。表4显示了与录制阶段和三个动态分析相关的开销:无分析(用null表示)、跟踪空和未定义的来源(用track表示)和污染分析(用taint表示)。我们还报告为每个基准程序录制的值的数量。实验是在配备2.3 GHz Intel Core i7 和 8 GB RAM 的笔记本电脑上进行的,并在 Chrome 25 上运行了网络应用,并在 node.js 0.8.14 上执行了重放。
我们没有衡量 web 应用程序的增长速度,因为它们大多是交互式应用程序。对于 SunSpider 基准套件,在记录阶段,我们观察到平均速度降低了 26 倍,最低为 1.5 倍,最高为 93 倍。 在重播阶段进行空分析时,我们观察到平均速度降低了 30 倍,最小值为 1.5 倍,最大值为 93 倍。 跟踪分析显示,平均速度降低了 32.75 倍,最小值为 1.5 倍,最大值为 96 倍。
5.1 JALANGI 动态分析检测到的问题
Jalangi 可能的类型不一致检查器发现,SunSpider 基准测试套件的 3d-cube.js 中的 CreateP 函数主要用作构造函数,但在某个位置它被称为函数。作为函数调用的结果,程序在全局对象中创建一个不必要的 V 字段。我们认为此调用可能是编程错误。
Jalangi 的对象分配分析器注意到附件游戏 webapp 中的 getValue(place,_board)方法创建了一个常量对象数千次。我们相信,通过在方法之外提升常数对象,可以避免这种不必要的常数对象的创建。
据我们所知,Jalangi 是第一个 JavaScript 动态分析框架。很少有工具可以执行 JavaScript 程序的录制回放。JSBench 使用录制回放机制创建 JavaScript 基准。Mugshot 捕获所有事件,以确定地重放 web 应用程序的执行。Ripley 在服务器端副本上复制客户端 JavaScript 程序的执行。
Jalangi 已经处理了 JavaScript 的各种具有挑战性的细节。由于可以处理 JavaScript 的所有令人担忧的问题,因此可以轻松地在 Jalangi 框架中实施动态分析。我们期望 Jalangi 将有助于未来 JavaScript 动态分析的研究。
本文由南京大学软件学院 2020 级硕士李彤宇转述翻译 感谢国家重点研发计划(2018YFB1003900)和国家自然科学基金(61832009,61932012)支持!
于想从事IT工作的人们来说,HTML5前端开发是一个不错的切入点。学习的门槛低,而且与后端语言相比,前期没有那么多抽象的知识需要理解,HTML5的学习曲线是先快后慢的。
青岛HTML5
对于HTML5零基础的人员来说,可能看到一开始有许多的知识点,就会觉得基础知识很多、很难学,其实只要规划好了一条学习路线,学习的时候更有针对性,HTML5远没有看起来那么难,知识点也没有你想的那么复杂。
1、HTML5介绍
内容包括:(互联网发展趋势、HTML5语言的优势、简单易学人人都能编程、H5就业和薪资情况、HTML5常见的项目与产品、HTML5的未来与方向)
2、HTML基础
内容包括:(HTML简介与历史版本、常用开发软件、常见标签与属性、表格与表单、标签规范与标签语义化、实战:网页结构布局)
3、CSS基础
内容包括:(CSS简介与基本语法、常见的各种样式属性、CSS选择器与标签类型、理解盒子模型与CSS重置、浮动与定位、利用PS工具测量样式、HTML+CSS开发网页、实战:仿电商首页效果)
4、CSS3基础
内容包括:(CSS3常见样式、CSS3选择器、变形与动画、3D效果与关键帧、弹性盒模型)
5、移动端布局
(移动端基本概念、viewport窗口设置、移动端布局方案、rem、vh、vw等单位、响应式布局、bootstrap框架)
6、JavaScript基础
内容包括:(JS简介、JS变量、数据类型与类型转换、运算符与优先级、流程控制-if..else流程控制-switch...case、流程控制-while、do..while、for循环、break、continue语法、函数定义与调用、全局变量与局部变量。还有函数传参与返回值、函数作用域与变量作用域、DOM的基本操作、定时器使用、this指向与修改指向、数组、字符串等方法操作、时间对象与正则对象、掌握常见BOM操作、常见事件与事件细节、JSON与AJAX、JSONP跨域操作、前端cookie的使用、实战:JS配合HTML与CSS完成电商项目)
7、jquery框架
内容包括:(jquery框架介绍及优势介绍、jquery核心思想、jquery常见方法、jquery动画操作、jqueryAJAX操作、jquery工具方法、利用jquery快速开发网页)
8、PHP基础
内容包括:(PHP简介与基本语法、mysql数据库及sql语法、apache服务器与集成开发工具、PHP链接数据库、PHP与AJAX交互、实战:留言板、登录、注册等)
9、HTML5基础项目
内容包括:(项目简介、项目功能演示、项目划分及框架、编写HTML页面结构、设置CSS样式、添加JS交互、可选框架:bootstrap、jquery、PHP等、项目调试及兼容、项目验收)
虽然HTML5前端薪资高入门门槛低, 但是俗话说得好:入门容易,精通难。HTML5前端开发的知识点繁多,要想真正掌握HTML5前端工程师开发技能,并非易事,因此什么时候也不要忘记多学习,多思考,多练习。
久前研究过 HTML5 Geolocation,最近整理 F2E-Awesome 的时候,发现缺少相关的文章,所以按照自己的使用经验整理了此篇文章。
一、应用场景:
请求一个位置信息,如果用户同意,浏览器就会返回位置信息,该位置信息是通过支持 HTML5 地理定位功能的底层设备提供给浏览器。位置信息由纬度/经度坐标和一些其他的元数据组成。有了这些位置信息就可以构建引人注意目的位置感知类应用程序。
二、简单示例
我们通过简短的代码先粗略认识一下,大致知道如何使用。
三、兼容性
四、相关 API
三个方法:
1.getCurrentPosition
获取用户当前定位位置,这会异步地请求获取用户位置,并查询定位硬件来获取最新信息。
需要注意的是:有 GPS 的设备可能需要一分钟或更久来获取 GPS 定位,在这种情况下 getCurrentPosition() 会返回低精度数据(基于 IP 的定位或 Wi-Fi 定位)。
2.watchPosition
您可以设定一个回调函数来响应定位数据发生的变更(设备发生了移动,或获取到了更高精度的地理位置信息),它与 getCurrentPosition() 接受相同的参数,但回调函数会被调用多次。错误回调函数与 getCurrentPosition() 中一样是可选的,也会被多次调用。
3.clearWatch
watchPosition() 函数会返回一个 ID,唯一地标记该位置监视器。您可以将这个 ID 传给 clearWatch() 函数来停止监视用户位置。
navigator.geolocation.clearWatch(watchID);
五、警告
[Deprecation] getCurrentPosition() and watchPosition() no longer work on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gl/rStTGz for more details.
在 IOS 10 中,苹果对 webkit 定位权限进行了修改,所有定位请求的页面必须是 https 协议的。如果是非 https 网页,在 http 协议下通过 html5 原生定位接口会返回错误,也就是无法正常定位到用户的具体位置,而已经支持 https 的网站则不会受影响。
六、定位原理
1.IP 定位
每一台连上网路的电脑都具有一个独一无二的 IP 位址,经由 IP 位址可以反查出电脑位置,但是结果并不精确,而且很容易到受到 ISP 的 IP 分配机制影响,而造成误差。
2.GPS 定位
GPS 是我们最常听到的定位技术,它是利用卫星来定位,可以很精确的侦测到使用者位置。但是要玩 GPS,行动装置一定要有 GPS 模组,而且尽管 GPS 非常精准,还是会有技术上的局限,比如在侦测位置时,GPS 的感应器要位于视线范围内(line of sight),因此在有很多高楼大厦、或者是障碍物的地方,GPS 反而没有办法运作自如。
3.Wi-Fi 三角测量定位
这个定位技术可以说是为都会区而设的,因为热闹的大都市通常会有不少 Wi-Fi 热点,定位供应商可以根据这些热点的相对位置、距离等建立一个资料库。Wi-Fi 三角测量适用于 GPS 无法渗透的地方,不过缺点是需要经常更新资料库。
4.基地台三角测量定位
借助基地台之间的相对位置,可以定位出用户在哪里,只要你的手机收得到讯号,就能定位。 一般来说,这四种技术的准确性由高而低分别是:GPS 定位、Wi-Fi 三角测量、基地台三角测量、IP定位。但还是要视环境而定,比如你到没有 Wi-Fi 热点的地方、或是手机信号不好,定位效果当然也会受影响。
*请认真填写需求信息,我们会在24小时内与您取得联系。