欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

動(dòng)態(tài)JavaScript所造成一些你不知道的危害

 更新時(shí)間:2016年09月25日 11:05:01   投稿:daisy  
這篇文章給大家整理了動(dòng)態(tài)JavaScript所造成的一些大家可能不知道的危害,文章介紹的很詳細(xì),有需要的朋友們可以參考借鑒,下面來一起看看吧。

動(dòng)態(tài)JavaScript

JavaScript代碼很多時(shí)候會(huì)通過服務(wù)器端的帶啊名來動(dòng)態(tài)地組合到一起。在這個(gè)組合的過程中,與用戶相關(guān)的信息會(huì)保存到這些JavaScript的代碼中。當(dāng)將這個(gè)JavaScript腳本傳送到瀏覽端的時(shí)候,客戶端的JavaScript會(huì)立即投入使用。但是實(shí)際情況是,這些腳本很有可能會(huì)被第三方的所引入,而引入這些腳本是沒有同源策略的限制的。因此,一個(gè)被攻擊者所控制的網(wǎng)頁很有可能同樣被包含引入動(dòng)態(tài)生成的JavaScript腳本然后觀察這個(gè)腳本的執(zhí)行情況以及可能存在的安全的問題。由于通過src方式導(dǎo)入的所有的JavaScript腳本和本地的腳本都是會(huì)共享全局變量的。因而,如果這樣的一個(gè)動(dòng)態(tài)腳本包含了用戶的隱私數(shù)據(jù),那么攻擊者就通過引入這個(gè)腳本的方式就能夠訪問到這些數(shù)據(jù)。這種方式也被稱之為跨站腳本包含(XSSI)。

JavaScript的語言特性

在動(dòng)態(tài)Javacript的危害中主要是涉及到JavaScript的作用域、原型鏈繼承這2個(gè)特性。

作用域的問題

JavaScript作用域的問題相信很多人都有所了解,不了解可以通過網(wǎng)上搜索看看。不像Java、C++這樣的語言是存在塊級(jí)作用域的,JavaScript僅僅是存在函數(shù)作用域。這就意味著JavaScript引擎會(huì)為每一個(gè)函數(shù)分配一個(gè)作用域。在函數(shù)內(nèi)部中定義的變量所在的作用域就是在函數(shù)內(nèi),這種作用域就叫做本地作用域。下面的代碼就很清楚地說明了全局作用域與本地作用域的區(qū)別。

原型鏈

在JavaScript中,每個(gè)創(chuàng)建的函數(shù)都有一個(gè)prototype(原型)屬性,這個(gè)屬性是一個(gè)指針,指向一個(gè)對(duì)象,而這個(gè)對(duì)象的用途是包含可以由特定類型的所有實(shí)例共享的屬性和方法。在JavaScript中主要是通過原型鏈的方式作為繼承的主要方法。其基本思想是利用原型讓一個(gè)應(yīng)用類型繼承另一個(gè)應(yīng)用類型的屬性和方法。當(dāng)訪問一個(gè)對(duì)象的屬性的時(shí)候,JavaScript就去判斷當(dāng)前這個(gè)對(duì)象本身是否含有這個(gè)屬性,如果不存在就在對(duì)象的原型屬性中尋找。

攻擊方式

由于HTM中的script標(biāo)簽不受同源策略的影響。因而腳本資源能夠?qū)氲娇缬虻捻撁娈?dāng)中。雖然跨域的頁面不能夠直接訪問到這些腳本的源代碼,但是導(dǎo)入這個(gè)腳本之后可以觀察這個(gè)腳本在頁面中的執(zhí)行情況。如果這樣的一個(gè)動(dòng)態(tài)腳本包含有用戶的隱私數(shù)據(jù),那么這種方式就有可能泄漏用戶的數(shù)據(jù)。

基于全局變量的攻擊

當(dāng)導(dǎo)入的JavaScrpit中創(chuàng)建了一個(gè)全局變量,這個(gè)全局變量也是可以被頁面中的JavaScript代碼所訪問的。因此如果一個(gè)動(dòng)態(tài)腳本將用戶的隱私數(shù)據(jù)賦值給了一個(gè)全局變量,那么攻擊者就可以通過全局變量就可以訪問到這個(gè)數(shù)據(jù)了。

假設(shè)在正常的腳本leak.js中的JavaScript代碼如下:

(function() {
 window.secret = "345a8b7c9d8e34f5";
})();

可以看到,此腳本中將用戶的隱私數(shù)據(jù)賦值給了windows全局變量。

惡意站點(diǎn)的代碼為:

<script src="http://www.good.com/leak1.js"></script>
<script>
 var user_data= window.secret; 
 // send user data to hacker
 sendstolendata(user_data);
</script>

當(dāng)用戶訪問到了含有上面的惡意代碼的網(wǎng)站的時(shí)候,此網(wǎng)站就會(huì)通過window對(duì)象來獲取用戶數(shù)據(jù)然后發(fā)送給攻擊者。

重新定義全局API攻擊

由于JavaScript的動(dòng)態(tài)性,導(dǎo)致很多的函數(shù)能夠被攻擊者重寫,即使是那些JavaScript內(nèi)置的函數(shù)。如果一個(gè)動(dòng)態(tài)的JavaScript腳本通過一個(gè)系統(tǒng)中內(nèi)置函數(shù)來傳遞隱私數(shù)據(jù),那么攻擊者在這個(gè)函數(shù)調(diào)用之前通過重寫這個(gè)函數(shù),就可以獲取到用戶的隱私數(shù)據(jù)了。

假設(shè)在正常的腳本leak.js中的JavaScript的代碼如下:

(function() {
 var secret = "345a8b7c9d8e34f5";

 JSON.stringify(secret);
})();

可以發(fā)現(xiàn),在這個(gè)代碼中,調(diào)用了JavaScript語言中自帶了的JSON.sttringify()的方法。而這個(gè)方法完全是可以被黑客所利用的。

以下是惡意站點(diǎn)中的代碼:

<script type="text/javascript">
 JSON.stringify = function (user_data) {
  sendstolendata(user_data);
 }
</script>
<script type="text/javascript" src="http://www.good.com/leak.js"></script>

當(dāng)用戶訪問此站點(diǎn)的時(shí)候,由于JSON.strinify()方法已經(jīng)被攻擊者重寫了,所以當(dāng)導(dǎo)入的leak.js的中的代碼執(zhí)行,調(diào)用JSON.stringify()的方法的時(shí)候,實(shí)際上調(diào)用的是攻擊者所寫的方法。這樣用戶的信息就會(huì)被竊取了。

原型篡改

正如之前說過的一樣,javaScript是基于原型鏈的。當(dāng)訪問對(duì)象的一個(gè)屬性的時(shí)候,JavaScript解釋器會(huì)通過原型鏈來進(jìn)行尋找,直到找到這個(gè)屬性為止。在下面的這段代碼中,我們就會(huì)對(duì)這個(gè)問題有一個(gè)清晰的認(rèn)識(shí)了。

假設(shè)在正常的腳本leak.js中的JavaScript的代碼如下:

(function(){
 var arr = ["secret1","secret2","secret3"];
 var x = arr.slice();
})();

從代碼中可以看到,在arr數(shù)組中存在了3個(gè)與用戶有關(guān)的隱私數(shù)據(jù)。然后arr實(shí)例調(diào)用了slice()方法。很明顯這個(gè)方法是不存在的。因?yàn)閍rr實(shí)例本身沒有創(chuàng)建和聲明這個(gè)方法,同時(shí)在Array對(duì)象中也沒有這個(gè)方法。但是當(dāng)出現(xiàn)一個(gè)這樣的情況的時(shí)候,程序并沒有報(bào)錯(cuò),只是說明這個(gè)slice方法不存在而已。所以在這樣的情況下,可能程序員也并不知道他所創(chuàng)建的arr實(shí)例有調(diào)用slice()這樣的一個(gè)方法。那么上面的這段代碼就很有可能會(huì)被攻擊者所利用。

以下是惡意站點(diǎn)的代碼:

<script type="text/javascript">
Array.prototype.slice = function() {
 //send data to attacker
 sendToAttackBackend(this);
}
</script>
<script type="text/javascript" src="http://www.good.com/leak.js"></script>

當(dāng)用戶訪問到這個(gè)含有惡意代碼的網(wǎng)站的時(shí)候,導(dǎo)入的leak.js中的JavaScript要執(zhí)行slice方法執(zhí)行的時(shí)候,就會(huì)調(diào)用攻擊者為Array添加的slice方法,這樣敏感數(shù)據(jù)就會(huì)發(fā)送到攻擊者了。

防范

開發(fā)人員在進(jìn)行網(wǎng)站開發(fā)的時(shí)候,最好是將代碼與數(shù)據(jù)分開。敏感和重要的數(shù)據(jù)應(yīng)該保存在單獨(dú)的文件中,這樣這些文件就不會(huì)被瀏覽器當(dāng)作JavaScript來執(zhí)行了。同時(shí)還需要為這些靜態(tài)資源設(shè)置訪問權(quán)限,只要在用戶登錄之后才可以訪問,在這種情況下攻擊者即使引入了這個(gè)靜態(tài)資源也無法訪問這個(gè)數(shù)據(jù)。

總結(jié)

以上就是關(guān)于動(dòng)態(tài)JavaScript所造成危害的全部?jī)?nèi)容了,希望這篇文章能對(duì)大家的學(xué)習(xí)或者工作帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • Javascript this 的一些學(xué)習(xí)總結(jié)

    Javascript this 的一些學(xué)習(xí)總結(jié)

    相信有C++、C#或Java等編程經(jīng)驗(yàn)的各位,對(duì)于this關(guān)鍵字再熟悉不過了。由于Javascript是一種面向?qū)ο蟮木幊陶Z言,它和C++、C#或Java一樣都包含this關(guān)鍵字,接下來我們將向大家介紹Javascript中的this關(guān)鍵字
    2012-08-08
  • 淺談js 閉包引起的內(nèi)存泄露問題

    淺談js 閉包引起的內(nèi)存泄露問題

    這篇文章主要介紹了淺談js 閉包引起的內(nèi)存泄露問題的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • Js中安全獲取Object深層對(duì)象的方法實(shí)例

    Js中安全獲取Object深層對(duì)象的方法實(shí)例

    Object是JavaScript基本數(shù)據(jù)類型之一(function也屬于object,是特殊的object),其存儲(chǔ)于堆中,這篇文章主要給大家介紹了關(guān)于Js中安全獲取Object深層對(duì)象的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 前端實(shí)現(xiàn)Word在線預(yù)覽功能詳解

    前端實(shí)現(xiàn)Word在線預(yù)覽功能詳解

    這篇文章主要給大家介紹了關(guān)于前端實(shí)現(xiàn)Word在線預(yù)覽功能的相關(guān)資料,工作中經(jīng)常有時(shí)會(huì)遇到需要給用戶創(chuàng)建word文檔并實(shí)現(xiàn)word文檔在線預(yù)覽的需求,需要的朋友可以參考下
    2023-09-09
  • JavaScript簡(jiǎn)單下拉菜單特效

    JavaScript簡(jiǎn)單下拉菜單特效

    這篇文章主要為大家詳細(xì)介紹了JavaScript簡(jiǎn)單下拉菜單特效,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 微信小程序如何訪問公眾號(hào)文章

    微信小程序如何訪問公眾號(hào)文章

    這篇文章主要介紹了微信小程序如何訪問公眾號(hào)文章,隨著小程序不斷的發(fā)展,現(xiàn)在個(gè)人的小程序也開放了很多功能了,個(gè)人小程序直接打開公眾號(hào)鏈接。在群里看到的一款小程序,點(diǎn)擊可以直接閱讀文章了,需要的朋友可以參考下
    2019-07-07
  • js+html5獲取用戶地理位置信息并在Google地圖上顯示的方法

    js+html5獲取用戶地理位置信息并在Google地圖上顯示的方法

    這篇文章主要介紹了js+html5獲取用戶地理位置信息并在Google地圖上顯示的方法,涉及html5元素的操作技巧,需要的朋友可以參考下
    2015-06-06
  • Ionic 2 實(shí)現(xiàn)列表滑動(dòng)刪除按鈕的方法

    Ionic 2 實(shí)現(xiàn)列表滑動(dòng)刪除按鈕的方法

    這篇教程將展示如何使用Ionic2添加一個(gè)簡(jiǎn)單的刪除按鈕到列表,當(dāng)用戶滑動(dòng)列表項(xiàng)到左邊的時(shí)候。這是一個(gè)處理刪除列表數(shù)據(jù)時(shí)候常用的模式,具體內(nèi)容大家通過本文學(xué)習(xí)吧
    2017-01-01
  • Javascript實(shí)現(xiàn)的類似Google的Div拖動(dòng)效果代碼

    Javascript實(shí)現(xiàn)的類似Google的Div拖動(dòng)效果代碼

    Javascript實(shí)現(xiàn)的類似Google的Div拖動(dòng)效果代碼,需要的朋友可以參考下。
    2011-08-08
  • js實(shí)現(xiàn)跟隨鼠標(biāo)移動(dòng)的小球

    js實(shí)現(xiàn)跟隨鼠標(biāo)移動(dòng)的小球

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)跟隨鼠標(biāo)移動(dòng)的小球,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評(píng)論