我們描述了一個名為 Jalangi 的工具框架,用于 JavaScript 程序的動態(tài)分析和符號執(zhí)行測試。該框架是用 JavaScript 編寫的,允許對 JavaScript 進行各種重載動態(tài)分析。Jalangi 包含兩個關(guān)鍵技術(shù):1)選擇性錄制回放,這是一種能夠錄制并準(zhǔn)確地回放用戶選擇的程序部分的技術(shù);2)陰影值和陰影執(zhí)行,可以輕松實現(xiàn)重量級動態(tài)分析,例如,condicolic 測試和污點跟蹤。Jalangi 通過對源代碼注入進行檢測,這使得它可以實現(xiàn)跨平臺移植。根據(jù) Apache 2.0 許可,可以從https://github.com/SRA-SiliconValley/jalangi獲得Jalangi。我們在SunSpider基準(zhǔn)套件和五個Web應(yīng)用程序上對Jalangi的評估表明,Jalangi在錄制過程中的平均速度降低了26倍,在重放和分析過程中的速度平均降低了30倍。與類似工具(如PIN和針對x86二進制文件的Valgrind)報告的類似情況相比,速度的降低是可比的。
JavaScript;動態(tài)分析;符號執(zhí)行測試
JavaScript 是編寫客戶端 web 應(yīng)用程序的首選語言,并且在編寫移動應(yīng)用程序(例如用于 Tizen OS 和 iOS)、桌面應(yīng)用程序(如 Windows 8 和 Gnome 桌面應(yīng)用程序)和服務(wù)器端應(yīng)用程序(如 node.js)時越來越流行。但是,針對 JavaScript 應(yīng)用程序的分析、測試和調(diào)試的工具較少。我們已經(jīng)開發(fā)了一個簡單而強大的框架,稱為 Jalangi,用于為 JavaScript 編寫重載動態(tài)分析。本文簡要介紹了該框架及其使用場景。該框架提供了一些有用的抽象和 API,大大簡化了 JavaScript 動態(tài)分析的實現(xiàn)。關(guān)于 Jalangi 背后的技術(shù)的詳細描述可以在[6]中找到。
Jalangi 可以在任何瀏覽器或 node.js 上工作。我們通過選擇性的源代碼檢測來實現(xiàn)瀏覽器的獨立性。即使某些源文件沒有檢測,Jalangi 也可以運行。對 Jalangi 的分析分兩個階段進行。在第一階段中,在用戶選擇的平臺(如 Android 上運行的 mobile chrome)上執(zhí)行并錄制一個插入指令的 JavaScript 應(yīng)用程序。在第二階段中,錄制的數(shù)據(jù)用于在桌面環(huán)境中執(zhí)行用戶指定的動態(tài)分析。
Jalangi 允許通過支持陰影值和陰影執(zhí)行輕松實現(xiàn)動態(tài)分析。陰影值使我們能夠?qū)㈥幱爸蹬c程序中使用的任何值相關(guān)聯(lián)。在 Jalangi 中,我們使用陰影值和執(zhí)行實現(xiàn)了幾個動態(tài)分析:1)共同語言測試,2)純符號執(zhí)行,3)跟蹤 null 和 undefined 的來源,4)檢測可能的類型不一致,5)簡單的對象分配分析器,6)簡單的動態(tài)污染分析。
我們提供了 Jalangi 的技術(shù)細節(jié)概要。有關(guān)更詳細的技術(shù)討論,請參閱[6]。用戶標(biāo)識由 Jalangi 檢測的 web 應(yīng)用程序的一個子集,以便錄制和回放。在錄制階段,將在用戶選擇的平臺上執(zhí)行生成的檢測代碼。即使使用了用戶代碼的子集,整個應(yīng)用程序也會在錄制階段執(zhí)行,包括已插入和未插入 JavaScript 代碼以及本機代碼。但是,在回放階段,Jalangi 僅回放已檢測的代碼。Jalangi 具有在用戶平臺上完整執(zhí)行 JavaScript 應(yīng)用程序的功能,使錄制的執(zhí)行可以在開發(fā)筆記本電腦/臺式機 JavaScript 引擎上進行調(diào)試,以進行調(diào)試,包括移動瀏覽器和基于 node.js 的系統(tǒng),或具有嵌入式 JavaScript 引擎的集成開發(fā)系統(tǒng)。這種方法還支持使用支持陰影執(zhí)行的底層陰影值實現(xiàn)動態(tài)分析。
通過錄制執(zhí)行期間從內(nèi)存加載的每個值,并在回放期間在相關(guān)內(nèi)存加載期間重新使用它們,可以有效地提供錄制和回放。這種方法雖然聽起來不錯,但也存在一些挑戰(zhàn),例如:(1)如何有效地錄制函數(shù)和對象?(2) 如何在未檢測本機函數(shù)(例如,JavaScript 事件 dispather)調(diào)用檢測函數(shù)時提供回放?通過提供間接記錄(其中唯一的數(shù)字標(biāo)識符與每個對象和功能相關(guān)聯(lián))以及記錄這些標(biāo)識符的值來解決第一個問題。第二個問題通過顯式錄制和調(diào)用已檢測功能來解決,這些功能又從未插入代碼中調(diào)用,或者由于 JavaScript 事件處理程序調(diào)度而執(zhí)行。
此外,我們還觀察到,回放期間的內(nèi)存負載值可以通過執(zhí)行檢測代碼來計算,而無需錄制所有內(nèi)存負載的值。通過僅記錄必要的內(nèi)存負載,這用于提高 Jalangi 的效率。為了確定是否必須記錄內(nèi)存負載的值,Jalangi 在記錄階段跟蹤影子內(nèi)存,該影子內(nèi)存將在執(zhí)行實際代碼時隨實際內(nèi)存一起更新。 執(zhí)行本機和未執(zhí)行的代碼不會對影子內(nèi)存進行更新。為了確保在重放階段可以使用正確的值,只有在記錄階段在內(nèi)存位置存儲的值存在差異時(例如,如果在內(nèi)存位置的值之間存在差異),Jalangi 才會存儲內(nèi)存負載的值。 實際加載的內(nèi)存及其關(guān)聯(lián)值存儲在影子內(nèi)存中)。
在 Jalangi 中,在回放階段執(zhí)行中使用的任何值都可以替換為帶注釋的值,該值可以為實際使用的值提供附加信息。例如,支持污染分析所需的額外污染信息,或者可能是與符號執(zhí)行中的實際值相關(guān)的信息,這些信息可以以符號表達式的形式提供。Jalangi 使用 concolvalue 類型的對象來表示帶注釋的值。
在 Jalangi,我們進行了以下動態(tài)分析:
Jalangi 可在https://github.com/SRA SiliconValley/Jalangi 上獲得。我們已經(jīng)用 JavaScript 實現(xiàn)了 Jalangi。
Jalangi 通過檢測 JavaScript 代碼進行操作。表 3 顯示了在表 1 中插入代碼后獲得的代碼。在檢測期間,Jalangi 從 Jalangi 庫插入各種回調(diào)函數(shù)。回調(diào)函數(shù)列在表 2 中。這些函數(shù)在 JavaScript 中包裝了各種操作。Jalangi 的選擇性錄制重放引擎是通過定義這些回調(diào)函數(shù)來實現(xiàn)的。
Jalangi 將工具庫公開為函數(shù)工具代碼。這也使我們能夠動態(tài)地測試在運行時創(chuàng)建和計算的任何代碼。例如,我們將對 eval(s)的任何調(diào)用修改為 eval(instrumentCode(s))。
我們在 JavaScript-SunSpider(http://www.webkit.org/perf/SunSpider/SunSpider.html)基準(zhǔn)套件中的26個程序和使用HTML5/JavaScript為Tizen操作系統(tǒng)編寫的5個web應(yīng)用程序上運行了Jalangi的錄制回放。(https://developer.tizen.org/下載/示例web應(yīng)用程序)。表4顯示了與錄制階段和三個動態(tài)分析相關(guān)的開銷:無分析(用null表示)、跟蹤空和未定義的來源(用track表示)和污染分析(用taint表示)。我們還報告為每個基準(zhǔn)程序錄制的值的數(shù)量。實驗是在配備2.3 GHz Intel Core i7 和 8 GB RAM 的筆記本電腦上進行的,并在 Chrome 25 上運行了網(wǎng)絡(luò)應(yīng)用,并在 node.js 0.8.14 上執(zhí)行了重放。
我們沒有衡量 web 應(yīng)用程序的增長速度,因為它們大多是交互式應(yīng)用程序。對于 SunSpider 基準(zhǔn)套件,在記錄階段,我們觀察到平均速度降低了 26 倍,最低為 1.5 倍,最高為 93 倍。 在重播階段進行空分析時,我們觀察到平均速度降低了 30 倍,最小值為 1.5 倍,最大值為 93 倍。 跟蹤分析顯示,平均速度降低了 32.75 倍,最小值為 1.5 倍,最大值為 96 倍。
5.1 JALANGI 動態(tài)分析檢測到的問題
Jalangi 可能的類型不一致檢查器發(fā)現(xiàn),SunSpider 基準(zhǔn)測試套件的 3d-cube.js 中的 CreateP 函數(shù)主要用作構(gòu)造函數(shù),但在某個位置它被稱為函數(shù)。作為函數(shù)調(diào)用的結(jié)果,程序在全局對象中創(chuàng)建一個不必要的 V 字段。我們認為此調(diào)用可能是編程錯誤。
Jalangi 的對象分配分析器注意到附件游戲 webapp 中的 getValue(place,_board)方法創(chuàng)建了一個常量對象數(shù)千次。我們相信,通過在方法之外提升常數(shù)對象,可以避免這種不必要的常數(shù)對象的創(chuàng)建。
據(jù)我們所知,Jalangi 是第一個 JavaScript 動態(tài)分析框架。很少有工具可以執(zhí)行 JavaScript 程序的錄制回放。JSBench 使用錄制回放機制創(chuàng)建 JavaScript 基準(zhǔn)。Mugshot 捕獲所有事件,以確定地重放 web 應(yīng)用程序的執(zhí)行。Ripley 在服務(wù)器端副本上復(fù)制客戶端 JavaScript 程序的執(zhí)行。
Jalangi 已經(jīng)處理了 JavaScript 的各種具有挑戰(zhàn)性的細節(jié)。由于可以處理 JavaScript 的所有令人擔(dān)憂的問題,因此可以輕松地在 Jalangi 框架中實施動態(tài)分析。我們期望 Jalangi 將有助于未來 JavaScript 動態(tài)分析的研究。
本文由南京大學(xué)軟件學(xué)院 2020 級碩士李彤宇轉(zhuǎn)述翻譯 感謝國家重點研發(fā)計劃(2018YFB1003900)和國家自然科學(xué)基金(61832009,61932012)支持!
于想從事IT工作的人們來說,HTML5前端開發(fā)是一個不錯的切入點。學(xué)習(xí)的門檻低,而且與后端語言相比,前期沒有那么多抽象的知識需要理解,HTML5的學(xué)習(xí)曲線是先快后慢的。
青島HTML5
對于HTML5零基礎(chǔ)的人員來說,可能看到一開始有許多的知識點,就會覺得基礎(chǔ)知識很多、很難學(xué),其實只要規(guī)劃好了一條學(xué)習(xí)路線,學(xué)習(xí)的時候更有針對性,HTML5遠沒有看起來那么難,知識點也沒有你想的那么復(fù)雜。
1、HTML5介紹
內(nèi)容包括:(互聯(lián)網(wǎng)發(fā)展趨勢、HTML5語言的優(yōu)勢、簡單易學(xué)人人都能編程、H5就業(yè)和薪資情況、HTML5常見的項目與產(chǎn)品、HTML5的未來與方向)
2、HTML基礎(chǔ)
內(nèi)容包括:(HTML簡介與歷史版本、常用開發(fā)軟件、常見標(biāo)簽與屬性、表格與表單、標(biāo)簽規(guī)范與標(biāo)簽語義化、實戰(zhàn):網(wǎng)頁結(jié)構(gòu)布局)
3、CSS基礎(chǔ)
內(nèi)容包括:(CSS簡介與基本語法、常見的各種樣式屬性、CSS選擇器與標(biāo)簽類型、理解盒子模型與CSS重置、浮動與定位、利用PS工具測量樣式、HTML+CSS開發(fā)網(wǎng)頁、實戰(zhàn):仿電商首頁效果)
4、CSS3基礎(chǔ)
內(nèi)容包括:(CSS3常見樣式、CSS3選擇器、變形與動畫、3D效果與關(guān)鍵幀、彈性盒模型)
5、移動端布局
(移動端基本概念、viewport窗口設(shè)置、移動端布局方案、rem、vh、vw等單位、響應(yīng)式布局、bootstrap框架)
6、JavaScript基礎(chǔ)
內(nèi)容包括:(JS簡介、JS變量、數(shù)據(jù)類型與類型轉(zhuǎn)換、運算符與優(yōu)先級、流程控制-if..else流程控制-switch...case、流程控制-while、do..while、for循環(huán)、break、continue語法、函數(shù)定義與調(diào)用、全局變量與局部變量。還有函數(shù)傳參與返回值、函數(shù)作用域與變量作用域、DOM的基本操作、定時器使用、this指向與修改指向、數(shù)組、字符串等方法操作、時間對象與正則對象、掌握常見BOM操作、常見事件與事件細節(jié)、JSON與AJAX、JSONP跨域操作、前端cookie的使用、實戰(zhàn):JS配合HTML與CSS完成電商項目)
7、jquery框架
內(nèi)容包括:(jquery框架介紹及優(yōu)勢介紹、jquery核心思想、jquery常見方法、jquery動畫操作、jqueryAJAX操作、jquery工具方法、利用jquery快速開發(fā)網(wǎng)頁)
8、PHP基礎(chǔ)
內(nèi)容包括:(PHP簡介與基本語法、mysql數(shù)據(jù)庫及sql語法、apache服務(wù)器與集成開發(fā)工具、PHP鏈接數(shù)據(jù)庫、PHP與AJAX交互、實戰(zhàn):留言板、登錄、注冊等)
9、HTML5基礎(chǔ)項目
內(nèi)容包括:(項目簡介、項目功能演示、項目劃分及框架、編寫HTML頁面結(jié)構(gòu)、設(shè)置CSS樣式、添加JS交互、可選框架:bootstrap、jquery、PHP等、項目調(diào)試及兼容、項目驗收)
雖然HTML5前端薪資高入門門檻低, 但是俗話說得好:入門容易,精通難。HTML5前端開發(fā)的知識點繁多,要想真正掌握HTML5前端工程師開發(fā)技能,并非易事,因此什么時候也不要忘記多學(xué)習(xí),多思考,多練習(xí)。
久前研究過 HTML5 Geolocation,最近整理 F2E-Awesome 的時候,發(fā)現(xiàn)缺少相關(guān)的文章,所以按照自己的使用經(jīng)驗整理了此篇文章。
一、應(yīng)用場景:
請求一個位置信息,如果用戶同意,瀏覽器就會返回位置信息,該位置信息是通過支持 HTML5 地理定位功能的底層設(shè)備提供給瀏覽器。位置信息由緯度/經(jīng)度坐標(biāo)和一些其他的元數(shù)據(jù)組成。有了這些位置信息就可以構(gòu)建引人注意目的位置感知類應(yīng)用程序。
二、簡單示例
我們通過簡短的代碼先粗略認識一下,大致知道如何使用。
三、兼容性
四、相關(guān) API
三個方法:
1.getCurrentPosition
獲取用戶當(dāng)前定位位置,這會異步地請求獲取用戶位置,并查詢定位硬件來獲取最新信息。
需要注意的是:有 GPS 的設(shè)備可能需要一分鐘或更久來獲取 GPS 定位,在這種情況下 getCurrentPosition() 會返回低精度數(shù)據(jù)(基于 IP 的定位或 Wi-Fi 定位)。
2.watchPosition
您可以設(shè)定一個回調(diào)函數(shù)來響應(yīng)定位數(shù)據(jù)發(fā)生的變更(設(shè)備發(fā)生了移動,或獲取到了更高精度的地理位置信息),它與 getCurrentPosition() 接受相同的參數(shù),但回調(diào)函數(shù)會被調(diào)用多次。錯誤回調(diào)函數(shù)與 getCurrentPosition() 中一樣是可選的,也會被多次調(diào)用。
3.clearWatch
watchPosition() 函數(shù)會返回一個 ID,唯一地標(biāo)記該位置監(jiān)視器。您可以將這個 ID 傳給 clearWatch() 函數(shù)來停止監(jiān)視用戶位置。
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 定位權(quán)限進行了修改,所有定位請求的頁面必須是 https 協(xié)議的。如果是非 https 網(wǎng)頁,在 http 協(xié)議下通過 html5 原生定位接口會返回錯誤,也就是無法正常定位到用戶的具體位置,而已經(jīng)支持 https 的網(wǎng)站則不會受影響。
六、定位原理
1.IP 定位
每一臺連上網(wǎng)路的電腦都具有一個獨一無二的 IP 位址,經(jīng)由 IP 位址可以反查出電腦位置,但是結(jié)果并不精確,而且很容易到受到 ISP 的 IP 分配機制影響,而造成誤差。
2.GPS 定位
GPS 是我們最常聽到的定位技術(shù),它是利用衛(wèi)星來定位,可以很精確的偵測到使用者位置。但是要玩 GPS,行動裝置一定要有 GPS 模組,而且盡管 GPS 非常精準(zhǔn),還是會有技術(shù)上的局限,比如在偵測位置時,GPS 的感應(yīng)器要位于視線范圍內(nèi)(line of sight),因此在有很多高樓大廈、或者是障礙物的地方,GPS 反而沒有辦法運作自如。
3.Wi-Fi 三角測量定位
這個定位技術(shù)可以說是為都會區(qū)而設(shè)的,因為熱鬧的大都市通常會有不少 Wi-Fi 熱點,定位供應(yīng)商可以根據(jù)這些熱點的相對位置、距離等建立一個資料庫。Wi-Fi 三角測量適用于 GPS 無法滲透的地方,不過缺點是需要經(jīng)常更新資料庫。
4.基地臺三角測量定位
借助基地臺之間的相對位置,可以定位出用戶在哪里,只要你的手機收得到訊號,就能定位。 一般來說,這四種技術(shù)的準(zhǔn)確性由高而低分別是:GPS 定位、Wi-Fi 三角測量、基地臺三角測量、IP定位。但還是要視環(huán)境而定,比如你到?jīng)]有 Wi-Fi 熱點的地方、或是手機信號不好,定位效果當(dāng)然也會受影響。
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。