HTML5 localStorageXSS漏洞
localStorage基礎(chǔ)
WindowlocalStorage屬性
HTML5 提供了兩種新的本地存儲(chǔ)方案,sessionStorage和localStorage,統(tǒng)稱(chēng)WebStorage。
顧名思義:
sessionStorage 是針對(duì)session的數(shù)據(jù)存儲(chǔ),關(guān)閉窗口后刪除。
localStorage 是一個(gè)本地的沒(méi)有時(shí)間限制的數(shù)據(jù)存儲(chǔ)。
它們同樣遵循SOP
語(yǔ)法:
window.localStorage
保存數(shù)據(jù)語(yǔ)法:
localStorage的局限
1、瀏覽器的大小不統(tǒng)一,并且在IE8以上的IE版本才支持localStorage這個(gè)屬性
2、目前所有的瀏覽器中都會(huì)把localStorage的值類(lèi)型限定為string類(lèi)型,這個(gè)在對(duì)我們?nèi)粘1容^常見(jiàn)的JSON對(duì)象類(lèi)型需要一些轉(zhuǎn)換
3、localStorage在瀏覽器的隱私模式下面是不可讀取的
4、localStorage本質(zhì)上是對(duì)字符串的讀取,如果存儲(chǔ)內(nèi)容多的話(huà)會(huì)消耗內(nèi)存空間,會(huì)導(dǎo)致頁(yè)面變卡
5、localStorage不能被爬蟲(chóng)抓取到
localStorage與sessionStorage的唯一一點(diǎn)區(qū)別就是localStorage屬于永久性存儲(chǔ),而sessionStorage屬于當(dāng)會(huì)話(huà)結(jié)束的時(shí)候,sessionStorage中的鍵值對(duì)會(huì)被清空
6、localStorage的使用也是遵循同源策略的,所以不同的網(wǎng)站直接是不能共用相同的localStorage
localStorage方法
setItem 存儲(chǔ)數(shù)據(jù)【增】
getItem 讀取數(shù)據(jù)【查單個(gè)】
removeItem 刪除某個(gè)數(shù)據(jù)【刪單個(gè)】
clear 刪除全部數(shù)據(jù)【刪全部】
length localStorage存儲(chǔ)變量的個(gè)數(shù)【計(jì)算數(shù)據(jù)總數(shù)】
key 讀取第i個(gè)數(shù)據(jù)的名字或稱(chēng)為鍵值(從0開(kāi)始計(jì)數(shù))
valueOf 獲取所有存儲(chǔ)的數(shù)據(jù)【查全部】
hasOwnProperty 檢查localStorage上是否保存了變量x,需要傳入x【判斷】
propertyIsEnumerable 用來(lái)檢測(cè)屬性是否屬于某個(gè)對(duì)象的【判斷】
toLocaleString 將(數(shù)組)轉(zhuǎn)為本地字符串
localStorage.setltem()存儲(chǔ)數(shù)據(jù)
localStorage.getItem()讀取數(shù)據(jù)
localStorage.removeItem()刪除數(shù)據(jù)
localStorage.clear()
localStorage安全分析
現(xiàn)在越來(lái)越多的前端人員把性能優(yōu)化的目標(biāo)指向了本地存儲(chǔ),利用localStorage來(lái)進(jìn)行本地資源緩存,因?yàn)槠浯笮∩舷逓?MB,可以裝相當(dāng)多的東西,甚至在FireFox中你還可以修改這個(gè)上限。
雖然說(shuō)這個(gè)localStorage非常好用但也存在安全隱患,如果我們將惡意代碼植入里面那么這段惡意代碼也會(huì)一直存在知道用戶(hù)清空我們的localStorage為止
我們可以看一段代碼:將原來(lái)localStorage存儲(chǔ)的name數(shù)據(jù)賦值給id為test的頁(yè)面元素 我們可以設(shè)想萬(wàn)一里面是惡意代碼呢
<!DOCTYPE html>
<html>
<head>
<title>localStorage XSS</title>
</head>
<body>
<div id="test"></div>
<script type="text/javascript">
localStorage.setItem('name','xiaohua');
document.getElementById("test").innerHTML = localStorage.name;
</script>
</body>
</html>
View Code
我們修改原有的localStorage里面name的值為惡意的XSS彈窗代碼 此時(shí)XSS彈窗發(fā)生
<!DOCTYPE html>
<html>
<head>
<title>localStorage XSS</title>
</head>
<body>
<div id="test"></div>
<script type="text/javascript">
localStorage.setItem('name','<img src=@ onerror=alert(1)>');
document.getElementById("test").innerHTML = localStorage.name;
</script>
</body>
</html>
View Code
實(shí)例場(chǎng)景:
參考學(xué)習(xí):https://blog.csdn.net/yanghuan313/article/details/55260232
總結(jié)
以上是生活随笔為你收集整理的HTML5 localStorageXSS漏洞的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 鹿血酒的功效?(鹿茸血酒如何鉴别真假)
- 下一篇: Java Web之网上购物系统(提交订单