XSS---DOM破壞

文章目錄

  • 前言
  • 一、pandas是什么?
  • 二、使用步驟
    • 1.引入庫
    • 2.讀入數據
  • 總結

一.什么是DOM破壞

????????在HTML中,如果使用一些特定的屬性名(idname)給DOM元素命名,這些屬性會在全局作用域中創建同名的全局變量,指向對應的DOM元素。這種行為雖然有時可以方便地訪問元素,但也會引發一些潛在的問題,特別是在元素的屬性名與JavaScript全局對象的屬性名沖突時,可能會破壞正常的DOM操作或腳本運行。這種現象被稱為DOM破壞(DOM clobbering)。

二.DOM破壞的原理

  1. 全局變量自動創建

    • 當DOM元素擁有idname屬性時,瀏覽器會自動在全局作用域(即window對象上)創建一個同名的屬性,指向該DOM元素。例如,<div id="foo">會創建一個window.foo屬性,指向這個div元素。
  2. 屬性名沖突

    • 如果元素的idname屬性與已有的JavaScript全局對象或內置屬性名沖突,會覆蓋原有的JS代碼。例如,如果有一個<input id="location">,它會覆蓋window.location,這會導致腳本中試圖訪問window.location時得到<input>元素,而不是期望的Location對象。
  3. 影響腳本執行

    • 由于全局變量被覆蓋,腳本在訪問這些全局變量時會得到意外的結果,導致錯誤或不可預測的行為。

舉個例子 1:

<body>
<img id="x">
<img name="y">
<script>
console.log(x)
console.log(y)
console.log(document.x)
console.log(document.y)
console.log(window.x)
console.log(window.y)
</script>
</body>

?運行結果:

<img id="x">
<img name="y">
<img id="x">
undefined
<img id="x">
<img name="y">

上述案例中,無需通過 getElementById 獲取<img>標簽,使得開發者更快速的獲取DOM節點。

案例 2:

????????上述案例中,在新創建的<div>標簽中插入一個<img>標簽并將該<div>標簽插入到<body>中,然而當我們利用document.cookie函數輸出網頁的cookie時,輸出的結果卻由空值改變成<img>標簽,造成這一現象的原因:元素的idname屬性與已有的JavaScript全局對象或內置屬性名沖突,會覆蓋原有的JS代碼。

最后通過案例3來驗證一下:

???????

?案例3中,JS代碼想要在<body>標簽中插入新建的<div>標簽,然而執行時卻顯示找不到函數document.body.appendchild 的執行方法,報錯原因無非就是這段JS代碼被<img>標簽所覆蓋,瀏覽器執行的實際代碼為:

<img id-"appendChild">(div)

????????通過案例1,2,3,不難發現這種行為雖然有時可以方便地訪問元素,但也會引發一些潛在的問題,特別是在元素的屬性名與JavaScript全局對象的屬性名沖突時,可能會破壞正常的DOM操作或腳本運行。這種現象被稱為DOM破壞。

? ? ? ? 在黑客的攻擊行為中,往往會利用DON破壞的特點,構造一個含有惡意腳本的惡意標簽從而與已有的JavaScript全局對象或內置屬性名沖突,覆蓋原有的JS對象,輸出惡意標簽

? ? ? ? 說到這里可能會有疑惑,惡意標簽按照原樣輸出有什么用?回答是:當然沒用啦,黑客通常會利用一些辦法將輸出的標簽轉換為字符串類型從而使得這些惡意標簽與某些執行參數為字符串類型的JS代碼的屬性名沖突時能夠被執行。

? ? ? ? 在HTML標簽中<a>標簽與<textarea>標簽自帶被調用時以字符串形式輸出的屬性,因此我們可以通過如下案例深入了解一下:

? ?上述案例中存在一個防御框架?DOMPurify,因此想要成功實現攻擊只能利用setTimeout函數,該函數將第一個字符串類型的參數ok延遲兩秒執行,利用此執行執特點,再配合DOM破壞可以構造如下惡意標簽?

<a id="ok" href="tel:alert(1)">

?上述惡意pyload通過構造與setTimeout函數參數名相同的標簽id,當setTimeout函數被調用時會查找HTML中id-ok的字符串類型的標簽,而<a>標簽被調用時正好為字符串形式,因此該函數執行時會調用黑客構造的惡意標簽<a>,同時執行當中的惡意腳本(這里若使用javascript會被防御框架過濾,因此利用該框架中1白名單函數tel,也可以執行JS腳本)。

??


總結

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

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

相關文章

算法:最大連續子序列和

53. 最大子數組和 給你一個整數數組 nums &#xff0c;請你找出一個具有最大和的連續子數組&#xff08;子數組最少包含一個元素&#xff09;&#xff0c;返回其最大和。 子數組是數組中的一個連續部分。 class Solution:def maxSubArray(self, nums: List[int]) -> int:a…

Vue $nextTick作?是什么怎么使用

Vue中的$nextTick是一個非常重要的方法&#xff0c;主要用于在DOM更新后執行延遲回調。其工作原理基于Vue的異步更新隊列機制。 當你在Vue實例上修改數據后&#xff0c;Vue并不會立即更新DOM&#xff0c;而是將這些修改操作推入一個隊列中&#xff0c;并在下一個事件循環的“t…

Shell | shell腳本中使用cp指令(外兩則)

sample"ENCFF253NIN" #等號兩側避免使用空格 source_path"/home/xxzhang/workplace/project/CRISPRa/Pacbio/CCS_TE.2/" target_path"./" cp "$source_path"/00-common_all.vcf.gz "$target_path" cp "$source_path&qu…

如何在Python中實現迭代器和可迭代對象

在Python中&#xff0c;可迭代對象&#xff08;iterable&#xff09;是一個對象&#xff0c;它可以返回一個迭代器&#xff08;iterator&#xff09;用于遍歷其元素。迭代器是一個對象&#xff0c;它有一個 __next__() 方法&#xff08;在Python 2中&#xff0c;它是 next() 方…

LiveGBS流媒體平臺GB/T28181用戶手冊-用戶管理:添加用戶、編輯、關聯通道、搜索、重置密碼

LiveGBS流媒體平臺GB/T28181用戶手冊-用戶管理:添加用戶、編輯、關聯通道、搜索、重置密碼 1、用戶管理1.1、添加用戶1.2、編輯用戶1.3、關聯通道1.4、重置密碼1.5、搜索1.6、刪除 2、搭建GB28181視頻直播平臺 1、用戶管理 1.1、添加用戶 添加用戶&#xff0c;可以配置登陸用戶…

STM32-按鍵控制LED

接上篇LED點亮;http://t.csdnimg.cn/9r6z7 目錄 一.硬件設計 二.軟件設計 三.完整代碼 四.結束語 一.硬件設計 按鈕接電源插入PB0引腳,如上圖所示 二.軟件設計 void key_init() {GPIO_InitTypeDef GPIO_InitStruct;//使能時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO…

【LeetCode:496. 下一個更大元素 I + 單調棧】

&#x1f680; 算法題 &#x1f680; &#x1f332; 算法刷題專欄 | 面試必備算法 | 面試高頻算法 &#x1f340; &#x1f332; 越難的東西,越要努力堅持&#xff0c;因為它具有很高的價值&#xff0c;算法就是這樣? &#x1f332; 作者簡介&#xff1a;碩風和煒&#xff0c;…

問題解決記錄1:nvidia-container-cli: initialization error: load library failed

本地docker運行 $ docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi 遇到這種報錯 Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error dur…

案例分享|Alluxio在自動駕駛模型訓練中的應用與部署

分享嘉賓&#xff1a; 楊林三-輝羲智能 關于輝羲智能&#xff1a; 輝羲智能致力打造創新車載智能計算平臺&#xff0c;提供高階智能駕駛芯片、易用開放工具鏈及全棧自動駕駛解決方案&#xff0c;運用獨創性“數據閉環定義芯片”方法學&#xff0c;助力車企構建低成本、大規模和…

百度生成數據庫

問題1&#xff1a; 幫我創建2個表student與score表&#xff0c;要求student表有id,createDate,userName,phone,age,sex,introduce&#xff0c; 要求score表有id,scoreName,result,studentId(student表的id外鍵)。 要求student表中插入5條學生信息&#xff0c;都要是中文的。 要…

docker flow

docker --version docker build -t tagname:version docker run --networknetwork --namename -p port:port imageName docker rmi docker rm docker images docker rm docker start docker stop

設計模式5——抽象工廠模式

寫文章的初心主要是用來幫助自己快速的回憶這個模式該怎么用&#xff0c;主要是下面的UML圖可以起到大作用&#xff0c;在你學習過一遍以后可能會遺忘&#xff0c;忘記了不要緊&#xff0c;只要看一眼UML圖就能想起來了。同時也請大家多多指教。 抽象工廠模式&#xff08;Abst…

每日5題Day8 - LeetCode 36 - 40

每一步向前都是向自己的夢想更近一步&#xff0c;堅持不懈&#xff0c;勇往直前&#xff01; 第一題&#xff1a;36. 有效的數獨 - 力扣&#xff08;LeetCode&#xff09; 題目要求我們進行判斷&#xff0c;我們不需要自己填寫&#xff0c;所以要一個標志位&#xff0c;來看當…

Rust:對 CUDA 的支持

主要歸功于Rust CUDA項目&#xff0c;該項目旨在將Rust語言推向高性能GPU計算的前沿。以下是關于Rust對CUDA支持的詳細解釋&#xff1a; Rust CUDA項目&#xff1a;這是一個開源項目&#xff0c;允許開發者在Rust中直接編譯到高度優化的PTX代碼&#xff0c;這是NVIDIA GPU上運…

Go源碼--sync庫(1)sync.Once和

簡介 這篇主要介紹 sync.Once、sync.WaitGroup和sync.Mutex sync.Once once 顧名思義 只執行一次 廢話不說 我們看源碼 英文介紹直接略過了 感興趣的建議讀一讀 獲益匪淺 其結構體如下 Once 是一個嚴格只執行一次的object type Once struct {// 建議看下源碼的注解&#xf…

首個“軟件供應鏈安全”國家標準正式發布!ToB企業震蕩,影響90%開發者

?近日&#xff0c;由開源網安深度參與編制的GB/T 43698-2024《網絡安全技術 軟件供應鏈安全要求》和GB/T 43848-2024《網絡安全技術 軟件產品開源代碼安全評價方法》兩項國家標準正式發布。 GB/T 43698-2024《網絡安全技術 軟件供應鏈安全要求》&#xff0c;是國內首個面向軟件…

Linux .eh_frame section以及libunwind

文章目錄 前言一、LSB二、The .eh_frame section2.1 簡介2.2 The Common Information Entry Format2.1.1 Augmentation String Format 2.3 The Frame Description Entry Format 三、The .eh_frame_hdr section四、libunwind五、基于Frame Pointer和基于unwind 形式的棧回溯比較…

雙向鏈表C++,C#,Java版,這些程序大多已經過測試,一直在用。

先C版吧&#xff0c;我最先用的是C#,后來是Java&#xff0c;后來改用C版的&#xff0c;因為現在一直在用C&#xff0c;單鏈 表一直沒寫上去&#xff0c;因為我很少用&#xff0c;用的是雙鏈表。 執行代碼例子1&#xff1a; int main() { _DList<_string> s…

9.STL中list的常見操作(圖文并茂)

目錄 1.list的介紹及使用 1.1.list的構造 1.2 list iterator的使用 1.3. list capacity 1.4.list modifiers 1.5.list的迭代器失效 1.list的介紹及使用 list介紹 &#xff0c;可以通過以下圖直觀的感受到 vector 和 list 的區別 Vector 插入代價高&#xff0c;但便于排…

力扣HOT100 - 72. 編輯距離

解題思路&#xff1a; 動態規劃 class Solution {public int minDistance(String word1, String word2) {int n1 word1.length();int n2 word2.length();int[][] dp new int[n1 1][n2 1];for (int j 1; j < n2; j) dp[0][j] dp[0][j - 1] 1;for (int i 1; i < …