XSS學習總結

一.XSS概述


跨站腳本攻擊(Cross-Site Scripting,XSS)是一種常見的網絡安全漏洞,攻擊者通過在網頁上注入惡意腳本代碼,從而在用戶的瀏覽器上執行惡意操作。這些腳本可以是 JavaScript、HTML 或其他網頁腳本語言。一旦用戶在受感染的網頁上進行交互,如點擊鏈接或填寫表單,惡意腳本就會在用戶瀏覽器上執行,從而導致多種安全問題,包括但不限于:

竊取用戶信息:攻擊者可以利用 XSS 漏洞竊取用戶的敏感信息,如用戶會話 cookie、登錄憑證等。
會話劫持:通過獲取用戶的會話信息,攻擊者可以冒充合法用戶,執行未授權的操作。
網頁篡改:攻擊者可以修改網頁內容,顯示虛假信息,誘導用戶點擊惡意鏈接或下載惡意文件。
釣魚攻擊:攻擊者可以偽裝成合法網站或服務,誘騙用戶輸入敏感信息,如用戶名、密碼、信用卡信息等。
XSS 漏洞通常出現在沒有充分驗證用戶輸入的地方,比如網站的搜索框、評論區、表單提交等。預防 XSS 攻擊的方法包括對用戶輸入進行嚴格過濾和轉義,使用安全的開發框架和編程語言,以及定期對網站進行安全審計和漏洞掃描。

XSS 主要分為反射型 XSS、存儲型 XSS 和 DOM 型 XSS 三類。以下是具體分類及例子介紹:

二、XSS分類

  1. 反射型 XSS:攻擊者將惡意腳本作為參數嵌入 URL 中,用戶訪問該 URL 時,服務器將參數直接返回給瀏覽器,瀏覽器執行其中的惡意腳本。例如,在一個搜索功能中,正常的搜索 URL 可能是 “https://example.com/search?keyword=蘋果”,攻擊者構造惡意 URL“https://example.com/search?keyword=<script>alert('XSS')</script>”,當用戶點擊該鏈接,搜索結果頁面返回時,瀏覽器會執行腳本彈出警告框,若腳本是竊取 Cookie 等代碼,就會導致用戶信息泄露。

  2. 存儲型 XSS:攻擊者將惡意腳本提交到目標服務器的數據庫中,當其他用戶訪問包含該腳本的頁面時,腳本會從數據庫中取出并在用戶瀏覽器中執行。常見于論壇評論、用戶資料等可輸入存儲內容的模塊。比如在論壇中,攻擊者發布一條包含惡意腳本的評論,如 “<script>document.cookie=' 惡意操作 ';</script>這是一條惡意評論”,其他用戶瀏覽該論壇頁面時,就會觸發此腳本,可能導致用戶 Cookie 被竊取或執行其他惡意操作。

  3. DOM 型 XSS:攻擊者通過修改頁面的 DOM 結構來注入惡意腳本,無需與服務器交互,主要利用前端 JavaScript 操作 DOM 時的漏洞。例如,頁面中有一段 JavaScript 代碼用于根據 URL 參數顯示不同內容,代碼如下:javascript

var param = window.location.hash.substring(1);
document.getElementById("content").innerHTML = param;

正常情況下,用戶訪問 “https://example.com/page#hello”,頁面會在指定位置顯示 “hello”。但攻擊者構造 URL“https://example.com/page#<script>alert('XSS')</script>”,瀏覽器解析頁面時,會將 URL 中的哈希值作為內容插入到 DOM 中,從而執行惡意腳本。

?三、XSS漏洞中的Prototype和Object利用


在XSS攻擊中,JavaScript的`prototype`和`Object`機制常被攻擊者利用來擴大攻擊面或繞過防御措施。下面我將詳細解釋這些概念及其在XSS攻擊中的應用。

1. JavaScript原型(Prototype)基礎
原型鏈概念:JavaScript是一種基于原型的語言,每個對象都有一個原型對象,對象從原型繼承屬性和方法。


// 構造函數
function User(name) {
? this.name = name;
}
?
// 通過prototype添加方法
User.prototype.greet = function() {
? return `Hello, ${this.name}`;
};
?
const user = new User('Alice');
console.log(user.greet()); // 繼承自prototype
?

?原型污染(Prototype Pollution):攻擊者可以通過修改對象的原型來影響所有基于該原型的實例。
// 惡意代碼可以污染Object原型
Object.prototype.isAdmin = true;
?
// 現在所有對象都會繼承isAdmin屬性
const user = { name: 'Bob' };
console.log(user.isAdmin); // true (即使未顯式設置)
AI寫代碼
2. Object在XSS中的利用
常見利用方式
2.1 污染內置對象原型
// 攻擊者可能注入的代碼
String.prototype.trim = function() {
? // 惡意代碼
? sendDataToAttacker(this);
? return this;
};
?
// 之后所有字符串的trim()都會執行惡意代碼
" normal input ".trim();
2.2 覆蓋關鍵方法
?
// 覆蓋Array.prototype.push
Array.prototype.push = function(item) {
? // 竊取數據
? exfiltrateData(item);
? // 調用原始實現
? return Array.prototype.push.apply(this, arguments);

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

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

相關文章

計算機網絡中:傳輸層和網絡層之間是如何配合的

可以把網絡層和傳輸層想成一個“快遞系統”&#xff1a; 網絡層&#xff08;IP 層&#xff09; 郵政系統&#xff1a;只負責把“包裹”&#xff08;IP 數據報&#xff09;從 A 地搬到 B 地&#xff0c;不保證順序、不保證不丟、不保證不重復。傳輸層&#xff08;TCP/UDP 層&am…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 用戶登錄實現

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解用戶登錄實現 視頻在線地址&#xff1a; …

Redis主從復制數據同步實現原理詳細介紹

文章目錄一、主從復制的概念二、全量復制&#xff08;完整重同步&#xff09;三、增量復制&#xff08;部分重同步&#xff09;1. 增量復制的核心思想2. 增量復制的實現3. 復制偏移量&#xff08;replicationoffset&#xff09;4. 復制積壓緩沖區&#xff08;replicationbacklo…

docker 軟件bug 誤導他人 筆記

DockerDesktopInstaller.exe install --installation-dirX:\AI-AI\docker\pro\ 由于 Docker官方隨便修改安裝命令&#xff0c;這個在4.4一下是無法使用的&#xff0c;存在誤導他人

Python 進階(六): Word 基本操作

目錄 1. 概述2. 寫入 2.1 標題2.2 段落2.3 表格2.4 圖片2.5 樣式 3. 讀取 1. 概述 Word 是一個十分常用的文字處理工具&#xff0c;通常我們都是手動來操作它&#xff0c;本節我們來看一下如何通過 Python 來操作。 Python 提供了 python-docx 庫&#xff0c;該庫就是為 Wo…

OpenLayers 入門指南【三】:API概要

目錄一、官方文檔二、核心類三、總結一、官方文檔 首頁右側有四個欄目分別是 Docs(文檔):也可以理解為使用指南&#xff0c;涵蓋一下四個模塊 Quick Start(快速入門)&#xff1a;介紹如何快速引入并使用OpenLayers快速構建一個地圖應用FAQ(問答)&#xff1a;介紹一些常見問題的…

JAVA面試寶典 -《Kafka 高吞吐量架構實戰:原理解析與性能優化全攻略》

&#x1f680; Kafka 高吞吐量架構實戰&#xff1a;原理解析與性能優化全攻略 隨著大數據技術在日志收集、埋點監控、訂單流處理等場景的普及&#xff0c;Kafka 已成為流處理架構中的核心組件。它之所以能在海量數據場景下保持高吞吐、低延遲&#xff0c;源于其在架構層面和底…

把sudo搞壞了怎么修復:報錯sudo: /etc/sudo.conf is owned by uid 1000, should be 0

今天部署 NFS 的時候一不小心給/etc目錄下所有的文件都所有者給改了&#xff0c;然后使用sudo的時候就出現了下面的問題&#xff1a; sudo: /etc/sudo.conf is owned by uid 1000, should be 0 sudo: /etc/sudo.conf is owned by uid 1000, should be 0 sudo: /etc/sudoers i…

VUE前端項目開發1.0.1版本

項目包含用戶權限管理、表單提交、數據上傳下載、儀表盤可視化等功能&#xff0c;非常適合新手從零開始學習Vue3前端開發&#xff0c;下述包含所有開發源代碼&#xff0c;敬請食用 廢話少說先上圖: 登陸界面: 儀表盤管理系統: 用戶管理: 對于普通用戶只有儀表盤和個人信息界…

低代碼平臺能否完全取代傳統前端開發

低代碼平臺不能完全取代傳統前端開發&#xff0c;主要原因包括靈活性有限、性能優化能力不足、復雜定制需求難以實現。 低代碼平臺盡管能快速開發出相對標準化的應用&#xff0c;但在處理復雜、個性化的業務需求時&#xff0c;明顯表現出不足。尤其在需要精細化控制UI界面、高性…

Git 中如何比較不同版本之間的差異?常用命令有哪些?

回答重點1&#xff09; git diff <commit1> <commit2> &#xff1a;比較兩個指定的提交之間的差異。2&#xff09; git diff <branch1> <branch2> &#xff1a;比較兩個分支之間的差異。3&#xff09; git diff <path> &#xff1a;比較工作目錄…

MySQL 8.0 OCP 1Z0-908 題目解析(32)

題目125 Choose three. Identify three functions of MySQL Enterprise Monitor. □ A) Analyze query performance. □ B) Start a logical backup. □ C) Determine the availability of monitored MySQL servers. □ D) Centrally manage users. □ E) Start a MySQL Enterp…

Spring處理器和Bean的生命周期

Spring處理器和Bean的生命周期Spring處理器是對Bean對象的的開發可以對BeanDifinition進行操作&#xff0c;例如動態添加、修改BeanDefinition、動態修改Bean。&#xff0c;也可以在Bean對象創建后對Bean對象進行代理增強。注意&#xff1a;對于處理器要又一個正確的認知&#…

Spring Framework源碼解析——BeanFactory

版權聲明 本文原創作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl1. BeanFactory 概述 BeanFactory 是 Spring IoC 容器的最基礎接口&#xff0c;它定義了獲取、配置和管理 Bean 的核心方法。它是 Spring 框架中容器體系的頂層接口之一&#…

C# 計算梯形面積和周長的程序(Program to calculate area and perimeter of Trapezium)

梯形是至少有一對邊平行&#xff0c;其他兩條邊可以不平行的四邊形。平行邊稱為梯形的底&#xff0c;其他兩條邊稱為梯形的腿。平行邊之間的垂直距離稱為梯形的高。公式 &#xff1a; 梯形面積&#xff1a; 0.5 * (a b) * h梯形周長&#xff1a; a b c d例子&#xff1a; 輸…

【計算機考研(408)- 數據結構】數組和特殊矩陣

數組和特殊矩陣 數組 數組的定義 數組是由n(n>1)個相同類型的數據元素構成的有限序列。每個數據元素稱為一個數組元素&#xff0c;每個元素在n個線性關系中的序號稱之為該元素的下標&#xff0c;下標的取值范圍稱為數組的維界。 數組是[[線性表]]的推廣&#xff0c;一維數組…

Agent架構與工作原理:理解智能體的核心機制

Agent架構與工作原理&#xff1a;深入理解智能體的核心機制 AI Agent的核心組成部分 一個完整的AI Agent通常由以下幾個核心模塊組成&#xff1a; 1. 規劃模塊&#xff08;Planning Module&#xff09; 規劃模塊是Agent的"大腦"&#xff0c;負責制定行動策略。它接收…

解決vscode中vue格式化后縮進太小的問題,并去除分號 - 設置Vetur tabSize從2到4,設置prettier取消分號semi

效果圖 左邊原來的&#xff0c;右邊是設置后的效果 實現步驟 安裝插件 Vetur 安裝插件 prettier Vscode > 文件 > 首選項 > 設置 搜索vetur > 找到比較下面的“Vetur > Format > Options: Tab Size” > 設置縮進為4 在附近找到“Vetur > Format: De…

計算機發展史:電子管時代的輝煌與局限

在計算機的發展歷程中&#xff0c;電子管時代猶如一顆璀璨的流星&#xff0c;短暫卻耀眼。它接過了機械計算裝置的接力棒&#xff0c;以電子管為核心元件&#xff0c;開啟了計算機的電子化征程&#xff0c;為后續的計算機發展奠定了堅實的基礎。這段從 20 世紀 40 年代到 50 年…

div和span區別

區別1區別2App.vue代碼 <template><div class"container"><h1>&#x1f3af; DIV 和 SPAN 標簽的區別演示</h1><!-- 第一部分&#xff1a;基本區別演示 --><section class"demo-section"><h2>&#x1f4e6; 1. …