SQL注入攻擊原理與防御全解析

目錄

一、引言

二、SQL 注入原理

2.1 SQL 注入的概念

2.2 SQL 注入產生的原因

2.3 SQL 注入的本質

2.4 SQL 注入的關鍵點

三、SQL 注入的實現方法

3.1 常見的 SQL 注入場景

3.2 不同類型的 SQL 注入方式

3.3 SQL 注入的一般流程

四、SQL 注入的危害

4.1 數據泄露

4.2 數據篡改與破壞

4.3 權限提升與系統控制

4.4 網站可用性降低

五、SQL 注入的預防措施

5.1 輸入驗證與過濾

5.2 使用預編譯語句和參數化查詢

5.3 最小權限原則

5.4 代碼審計與安全測試



一、引言

在當今數字化時代,Web 應用程序已成為企業和個人展示信息、提供服務的重要平臺。然而,隨著網絡應用的日益復雜,安全問題也愈發凸顯。SQL 注入作為一種常見且極具威脅的網絡攻擊手段,時刻威脅著 Web 應用程序的數據安全。據相關安全報告顯示,每年因 SQL 注入攻擊導致的經濟損失高達數十億美元,眾多知名企業和機構都曾遭受其害。因此,深入了解 SQL 注入的原理、實現方式及預防措施,對于保障 Web 應用程序的安全至關重要。


二、SQL 注入原理

2.1 SQL 注入的概念

SQL 注入是一種代碼注入技術,攻擊者通過在 Web 應用程序的輸入字段中插入惡意的 SQL 語句,從而欺騙應用程序執行非預期的數據庫操作。當應用程序使用用戶輸入來構造動態 SQL 查詢時,如果未對輸入進行嚴格的驗證和過濾,就可能導致 SQL 注入漏洞的出現。例如,一個簡單的用戶登錄功能,應用程序可能會根據用戶輸入的用戶名和密碼構造如下 SQL 查詢語句:

SELECT * FROM users WHERE username = '$username' AND password = '$password'

若攻擊者在用戶名或密碼字段中輸入特殊字符和 SQL 語句,如將密碼字段輸入為 ' OR '1'='1,則最終構造的 SQL 語句變為:

SELECT * FROM users WHERE username = '$username' AND password = '' OR '1'='1'

這樣,無論用戶名和密碼是否正確,該查詢語句都將返回所有用戶記錄,攻擊者從而繞過了身份驗證機制。


2.2 SQL 注入產生的原因

  1. 輸入驗證缺失或不嚴格:這是導致 SQL 注入的最主要原因。許多開發人員在編寫代碼時,未對用戶輸入進行充分的驗證,允許用戶輸入任意字符,包括 SQL 關鍵字和特殊字符,使得攻擊者能夠輕易構造惡意 SQL 語句。
  1. 動態 SQL 構造不當:在使用動態 SQL 構建查詢語句時,如果直接將用戶輸入拼接在 SQL 字符串中,而未采取適當的轉義或參數化處理,就為 SQL 注入創造了條件。例如:
    username = request.GET.get('username')password = request.GET.get('password')query = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'"

    上述代碼直接將用戶輸入拼接到 SQL 查詢中,極易受到 SQL 注入攻擊。

3. 數據庫權限設置不合理:若數據庫用戶具有過高的權限,一旦攻擊者成功實施 SQL 注入,就可能對數據庫進行任意操作,如刪除數據、修改數據結構、獲取敏感信息等,造成嚴重的后果。


2.3 SQL 注入的本質

SQL 注入的本質是將用戶輸入的數據當作代碼來執行,打破了 “數據與代碼分離” 的安全原則。正常情況下,用戶輸入應僅作為數據傳遞給應用程序,由應用程序按照既定的業務邏輯和安全規則進行處理。但在存在 SQL 注入漏洞的情況下,攻擊者能夠巧妙地利用輸入字段,將惡意的 SQL 代碼混入其中,使應用程序在不知情的情況下將其作為 SQL 命令執行,從而實現對數據庫的非法訪問和操作。


2.4 SQL 注入的關鍵點

  1. 用戶能夠控制輸入內容:這是 SQL 注入的前提條件。如果用戶無法對輸入進行干預,攻擊者就無法注入惡意 SQL 語句。常見的可被攻擊者利用的輸入點包括 Web 表單輸入、URL 參數、Cookie 值、HTTP 請求頭中的某些字段等。
  1. 應用程序將用戶輸入帶入數據庫執行:當應用程序將未經嚴格驗證和過濾的用戶輸入直接用于構建 SQL 查詢,并提交給數據庫引擎執行時,就為 SQL 注入攻擊敞開了大門。數據庫引擎會按照 SQL 語法規則解析和執行這些包含惡意代碼的查詢,從而導致安全問題的發生。

三、SQL 注入的實現方法

3.1 常見的 SQL 注入場景

  1. 登錄表單注入:如前文所述的用戶登錄功能,攻擊者通過在用戶名或密碼字段中輸入惡意 SQL 語句,試圖繞過身份驗證,獲取系統訪問權限。這是最為常見的 SQL 注入場景之一,許多網站的后臺管理系統、用戶賬戶系統等都可能面臨此類風險。
  1. 搜索框注入:在一些具有搜索功能的 Web 應用中,用戶輸入的搜索關鍵詞通常會被用于構建 SQL 查詢,以從數據庫中檢索相關數據。若對搜索輸入未進行有效過濾,攻擊者可利用這一機制注入 SQL 語句,實現對數據庫的任意查詢,甚至獲取敏感信息。例如,一個圖書搜索系統,用戶輸入的搜索關鍵詞可能被用于如下 SQL 查詢:
    SELECT * FROM books WHERE title LIKE '%$search_term%'

    攻擊者若輸入 ' OR 1=1 -- 作為搜索關鍵詞,查詢語句將變為:

    SELECT * FROM books WHERE title LIKE '%' OR 1=1 -- %'

    這樣,無論數據庫中是否存在匹配的圖書記錄,都會返回所有圖書信息。

3. URL 參數注入:某些 Web 應用會通過 URL 參數傳遞數據給后端程序,用于執行特定的數據庫操作。例如,一個顯示用戶個人資料的頁面,URL 可能為 http://example.com/user.php?id=1,其中 id 參數用于指定要查詢的用戶 ID。如果后端程序未對 id 參數進行嚴格驗證,攻擊者可通過修改 URL 參數值為惡意 SQL 語句,如 http://example.com/user.php?id=1 OR 1=1,來獲取所有用戶的資料信息。


3.2 不同類型的 SQL 注入方式

  1. 數字型注入:當輸入參數為整型時,如 ID、年齡、頁碼等,如果存在注入漏洞,則可能發生數字型注入。在弱類型語言(如 ASP、PHP)中,數字型注入較為常見。例如,對于一個 PHP 頁面,其接收的參數 id 用于查詢數據庫中的記錄,對應的 SQL 語句可能為:
    SELECT * FROM products WHERE product_id = $id

    若攻擊者將 id 參數值修改為 1 OR 1=1,則 SQL 語句變為:

    SELECT * FROM products WHERE product_id = 1 OR 1=1

    由于 1 OR 1=1 恒為真,該查詢將返回 products 表中的所有記錄。而在強類型語言(如 Java、C#)中,若嘗試將非整型字符串轉換為整型,會拋出異常,從而阻止數字型注入的發生。

2. 字符型注入:當輸入參數為字符串類型時,稱為字符型注入。與數字型注入的最大區別在于,字符型注入通常需要使用單引號(')或雙引號(")來閉合字符串。例如,一個用于查詢用戶信息的 SQL 語句:

SELECT * FROM users WHERE username = '$username'

若攻擊者在 username 字段中輸入 ' OR '1'='1,則最終的 SQL 語句變為:

SELECT * FROM users WHERE username = '' OR '1'='1'

這樣,攻擊者同樣可以繞過查詢條件,獲取所有用戶信息。在某些情況下,還可能需要考慮特殊字符的轉義問題,如在使用雙引號包裹字符串時,若字符串中包含雙引號,可能需要進行轉義處理,否則會導致 SQL 語法錯誤。

3. 布爾盲注:布爾盲注是一種基于布爾值判斷的注入方式。當 Web 應用程序對 SQL 查詢結果的返回頁面沒有明顯的錯誤提示,但可以根據頁面顯示內容(如是否顯示特定文本、頁面是否正常加載等)來判斷查詢結果的真假時,可采用布爾盲注。例如,假設一個網站的搜索功能,當搜索結果存在時,頁面顯示 “找到相關結果”,否則顯示 “未找到相關結果”。攻擊者可以通過構造如下 SQL 注入語句來判斷數據庫中是否存在特定用戶:

?id=1 AND (SELECT COUNT(*) FROM users WHERE username = 'admin')>0

如果頁面顯示 “找到相關結果”,則說明數據庫中存在名為 admin 的用戶;反之,則不存在。通過不斷構造類似的布爾表達式,攻擊者可以逐步獲取數據庫中的敏感信息,如用戶名、密碼等。

4. 時間盲注:當布爾盲注無法實施(如頁面返回結果始終一致,無法通過頁面顯示內容判斷查詢結果真假)時,時間盲注可作為一種有效的替代方法。時間盲注利用 SLEEP 函數或類似的延遲執行函數,根據 Web 頁面響應時間的差異來判斷 SQL 注入語句是否執行成功。例如,在 MySQL 數據庫中,攻擊者可以構造如下時間盲注語句:

?id=1 AND IF((SELECT COUNT(*) FROM users WHERE username = 'admin'), SLEEP(5), 0)

如果數據庫中存在名為 admin 的用戶,SLEEP(5) 函數將被執行,頁面響應時間會延遲 5 秒;否則,頁面將正常快速響應。通過這種方式,攻擊者可以逐步推斷出數據庫中的信息,盡管注入過程相對較慢,但在某些情況下是獲取敏感信息的唯一途徑。

5. 聯合查詢注入:聯合查詢注入是在目標頁面存在顯示位(即能夠將查詢結果顯示在頁面上)的前提下使用的一種注入方式。它通過 UNION 關鍵字合并兩個或多個 SELECT 語句的結果集。例如,假設一個新聞列表頁面,其 SQL 查詢語句用于獲取新聞標題和內容,攻擊者可以通過構造如下聯合查詢注入語句來獲取數據庫中的其他信息:

?id=-1 UNION SELECT database(), version()

在上述語句中,-1 用于使原查詢語句返回空結果(因為通常新聞 ID 不會為負數),UNION 關鍵字將后面的查詢結果與原查詢結果合并。如果頁面存在顯示位,數據庫名稱和版本信息將被顯示在頁面上。通過進一步構造復雜的聯合查詢語句,攻擊者可以獲取數據庫中的表名、字段名以及具體數據等敏感信息。

6. 報錯注入:報錯注入利用數據庫在執行 SQL 語句時發生錯誤并返回錯誤信息的特性,通過精心構造惡意 SQL 語句,使數據庫返回包含敏感信息的錯誤提示。不同數據庫有不同的報錯注入方法,以 MySQL 為例,常用的報錯函數有 EXTRACTVALUE、UPDATEXML 等。例如,攻擊者可以構造如下報錯注入語句:

?id=1 AND EXTRACTVALUE(1, CONCAT(0x7e, (SELECT database()), 0x7e))

當數據庫執行該語句時,EXTRACTVALUE 函數會嘗試從一個無效的 XML 路徑中提取值,從而導致錯誤。在錯誤信息中,將包含數據庫名稱(因為 CONCAT 函數將數據庫名稱與其他字符拼接在一起)。通過分析這些錯誤信息,攻擊者可以逐步獲取數據庫中的敏感信息。報錯注入的優點是注入速度相對較快,但缺點是語句較為復雜,且可能因數據庫配置不同而受到限制(如某些數據庫可能關閉了錯誤信息顯示功能)。


3.3 SQL 注入的一般流程

  1. 注入點探測:這是 SQL 注入的第一步,也是關鍵的一步。攻擊者需要通過各種方法判斷目標 Web 應用程序是否存在 SQL 注入漏洞以及哪些輸入點可能存在漏洞。常見的探測方法包括在輸入字段中添加特殊字符(如單引號 '、雙引號 "、分號 ;、括號 () 等),觀察頁面返回結果是否出現 SQL 語法錯誤提示。例如,在一個搜索框中輸入 ',如果頁面返回類似于 “You have an error in your SQL syntax...” 的錯誤信息,則很可能存在 SQL 注入漏洞。此外,還可以使用自動化掃描工具(如 Burp Suite、SQLMap 等)對目標網站進行全面掃描,快速發現潛在的注入點。
  1. 數據庫類型判斷:在確定存在注入點后,攻擊者需要判斷目標數據庫的類型,因為不同類型的數據庫具有不同的語法和特性,注入方法也有所差異。常見的判斷數據庫類型的方法有:
    • 利用錯誤信息:輸入特殊字符或特定函數,觀察錯誤信息的特征。例如,輸入 1 AND version()>0,如果頁面返回正常,說明 version() 函數被數據庫識別并執行,而 version() 函數是 MySQL 特有的函數,由此可推斷后臺數據庫為 MySQL。
    • 使用特定的 SQL 語句:根據不同數據庫對某些 SQL 語句的支持情況來判斷。例如,SQL Server 支持 SELECT @@VERSION 語句獲取數據庫版本信息,而 MySQL 不支持。攻擊者可以嘗試執行此類語句,根據執行結果判斷數據庫類型。
  1. 數據獲取與攻擊實施:在確定數據庫類型后,攻擊者根據具體情況選擇合適的注入方式進行數據獲取和攻擊。例如,如果是數字型注入且頁面存在顯示位,可嘗試使用聯合查詢注入獲取數據庫中的敏感信息;如果是字符型注入,需注意字符串的閉合方式;對于布爾盲注和時間盲注,攻擊者則需要耐心構造一系列的注入語句,通過頁面返回結果或響應時間的變化來逐步推斷數據庫中的信息。一旦獲取到足夠的敏感信息,如管理員賬號和密碼,攻擊者可能進一步嘗試登錄后臺管理系統,對網站進行惡意篡改、數據竊取或破壞等操作。

四、SQL 注入的危害

4.1 數據泄露

SQL 注入最直接的危害是導致敏感數據泄露。攻擊者通過注入惡意 SQL 語句,可以獲取數據庫中的用戶賬號、密碼、身份證號碼、信用卡信息等重要數據。這些數據一旦落入不法分子手中,可能被用于身份盜竊、信用卡詐騙、網絡釣魚等犯罪活動,給用戶帶來巨大的經濟損失和隱私泄露風險。例如,2017 年,知名信用報告機構 Equifax 遭遇 SQL 注入攻擊,約 1.43 億美國消費者的個人信息被泄露,包括姓名、社會安全號碼、出生日期、地址以及部分信用卡信息等,此次事件不僅給 Equifax 公司帶來了嚴重的聲譽損失,還引發了廣泛的社會關注和法律訴訟。

4.2 數據篡改與破壞

攻擊者利用 SQL 注入漏洞,不僅可以獲取數據,還能夠對數據庫中的數據進行篡改和破壞。他們可以修改用戶信息、訂單數據、產品庫存等關鍵數據,導致業務流程混亂,影響企業的正常運營。更為嚴重的是,攻擊者可能刪除整個數據庫或關鍵數據表,造成數據永久性丟失,給企業帶來災難性的后果。例如,一些競爭對手可能通過 SQL 注入攻擊,惡意篡改電商網站的商品價格,使其在市場競爭中處于劣勢;或者刪除企業的客戶訂單數據,導致客戶服務中斷,客戶流失。

4.3 權限提升與系統控制

在某些情況下,SQL 注入攻擊還可能導致權限提升,使攻擊者獲得對數據庫服務器甚至整個操作系統的控制權。如果數據庫用戶具有較高的權限,攻擊者通過注入特定的 SQL 語句,可能執行系統命令、上傳惡意文件(如木馬程序),從而完全控制服務器。一旦服務器被攻陷,攻擊者可以進一步對網絡中的其他設備進行攻擊,擴大攻擊范圍,造成更大的安全威脅。例如,攻擊者可以利用 SQL 注入漏洞在服務器上植入后門程序,隨時獲取服務器的敏感信息,或者將服務器作為跳板,對其他內部網絡進行滲透測試和攻擊。

4.4 網站可用性降低

SQL 注入攻擊可能導致網站無法正常訪問,降低網站的可用性。當攻擊者注入大量惡意 SQL 語句,使數據庫服務器負載過高或出現錯誤時,網站可能會出現頁面加載緩慢、無法響應甚至崩潰的情況。這不僅會影響用戶體驗,導致用戶流失,還會給企業帶來經濟損失,特別是對于一些依賴在線業務的企業來說,網站不可用可能意味著業務中斷,收入減少。例如,一些電商網站在遭受 SQL 注入攻擊后,用戶無法正常瀏覽商品、下單購買,嚴重影響了企業的銷售額和客戶滿意度。


五、SQL 注入的預防措施

5.1 輸入驗證與過濾

  1. 嚴格的數據類型檢查:在接收用戶輸入時,應用程序應明確檢查輸入數據的類型,確保其符合預期的數據類型要求。例如,對于期望為整型的輸入字段,應使用類型轉換函數(如在 PHP 中使用 intval() 函數)將用戶輸入轉換為整型,并檢查轉換結果是否有效。如果轉換失敗,則說明輸入數據類型不正確,應拒絕處理并提示用戶輸入正確的數據類型。這樣可以有效防止攻擊者通過輸入非預期類型的數據進行 SQL 注入攻擊。
  1. 白名單驗證:采用白名單驗證機制,只允許用戶輸入符合特定規則的字符和數據格式。例如,對于用戶名輸入字段,只允許輸入字母、數字和特定的字符(如下劃線 _),并限制用戶名的長度。可以使用正則表達式來實現白名單驗證,如在 Python 中,可以使用 re 模塊進行正則表達式匹配:
    import reusername = input("請輸入用戶名:")pattern = re.compile(r'^[a-zA-Z0-9_]{3,20}$')if not pattern.match(username):print("用戶名格式不正確,請輸入3到20位的字母、數字或下劃線組合。")

    通過這種方式,確保用戶輸入的數據不會包含惡意的 SQL 關鍵字或特殊字符,從而有效預防 SQL 注入。

3. 特殊字符過濾:對用戶輸入中的特殊字符進行過濾或轉義處理,使其失去 SQL 語法的特殊意義。例如,在 PHP 中,可以使用 addslashes() 函數對單引號、雙引號、反斜杠等特殊字符進行轉義;在 Java 中,可以使用 PreparedStatement 接口,它會自動對輸入參數進行轉義處理,防止 SQL 注入。需要注意的是,單純的特殊字符過濾可能存在繞過風險,因此應結合其他預防措施一起使用。

5.2 使用預編譯語句和參數化查詢

預編譯語句的原理與優勢:預編譯語句(Prepared Statements)是一種在數據庫執行之前對 SQL 語句進行編譯的技術。在使用預編譯語句時,SQL 語句中的參數部分使用占位符(如 ?)代替實際值,預編譯語句將 SQL 語句的結構與數據分離,使用占位符表示參數,在執行時再綁定實際數據。例如在 Java 中使用?PreparedStatement,在 Python 的?mysql - connector - python?庫中使用參數化查詢:

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="yourdatabase"
)mycursor = mydb.cursor()
username = "testuser"
password = "testpass"
sql = "SELECT * FROM users WHERE username = %s AND password = %s"
mycursor.execute(sql, (username, password))
results = mycursor.fetchall()

這種方式能有效防止 SQL 注入,因為數據庫會將輸入作為普通數據處理,而不會當作 SQL 代碼執行。

5.3 最小權限原則

為數據庫用戶分配滿足其工作所需的最小權限,避免使用具有過高權限(如?root?權限)的賬戶連接數據庫。對于不同的應用功能模塊,設置不同權限的數據庫用戶,降低攻擊者成功注入后造成的危害。

5.4 代碼審計與安全測試

定期對應用程序代碼進行安全審計,檢查是否存在 SQL 注入漏洞。同時,使用專業的安全測試工具(如 SQLMap、OWASP ZAP 等)對應用進行自動化掃描,并結合人工滲透測試,及時發現和修復潛在的安全問題。

以上全面介紹了 SQL 注入相關內容。若你對其中某個部分想深入了解,或還有其他網絡安全相關需求,歡迎與博主進行討論,博主期待你的關注。

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

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

相關文章

寫實交互數字人:賦能消防知識科普,點亮智能交互講解新未來

在數字化浪潮席卷全球的今日,科技創新以前所未有的速度重塑著我們的生活方式與產業格局。消防知識科普,作為守護生命財產安全的關鍵防線,也亟待借力新興技術實現變革與突破。深聲科技以其行業領先的 2D 寫實交互數字人技術,為消防…

用 HTML、CSS 和 JavaScript 實現五子棋人機對戰游戲

引言 在 Web 開發的世界里,通過 HTML、CSS 和 JavaScript 可以創造出各種各樣有趣的互動游戲。今天,我們將深入探討如何實現一個簡單而又富有挑戰性的五子棋人機對戰游戲。這個游戲不僅能讓你重溫經典的五子棋玩法,還能通過 AI 對戰功能給你…

【QT】自動更新庫QSimpleUpdater使用實例封裝

【QT】自動更新庫QSimpleUpdater使用實例封裝 QSimpleUpdater 庫信號介紹appcastDownloaded 信號downloadFinished信號概括 參數介紹 實例編寫 QSimpleUpdater 庫 QSimpleUpdater是一個用于QT的開源自動更新庫,它可以幫助開發者實現應用程序的版本檢查和自動更新功…

Nginx、CDN、 DNS的關系解析

文章目錄 Nginx 與 CDN 的關系1. 角色定位2. 協作方式3. 自建 CDN vs. 第三方 CDN Nginx 與 DNS 的關系1. 角色定位2. 協作方式3. 性能優化 CDN 與 DNS 的關系1. 角色定位2. 協作方式3. 高級 DNS 技術 三者結合的典型架構總結 Nginx、CDN 和 DNS 是現代網絡架構中的三個關鍵組件…

PH熱榜 | 2025-06-13

1. Flowstep 標語:借助人工智能,瞬間設計出美觀的用戶界面。 介紹:Flowstep 是您的 AI 設計助手,將簡單的文字提示轉化為用戶界面設計、線框圖和流程圖。它能加速您的工作流程,讓您輕松迭代,內置建議幫助…

Spectacular AI Gemini2 跑通實時建圖

參考鏈接:Spectacular AI 硬件設備 gemini2 測試了gemini335沒成功 修改record.cpp 倉庫鏈接:sdk 讀取Timu_cam ros2 run tf2_ros tf2_echo imu坐標系(加速度計和陀螺儀都可以,兩者變換為單位陣)camera_rgb_optic…

簡析MDM在餐飲設備中的部署與應用

引言:科技驅動餐飲運營升級 在競爭激烈的餐飲行業,科技已成為提升服務質量和運營效率的關鍵。從自助點餐機、數字菜單牌,到移動收銀系統,智能設備已經深入餐廳的日常運營。然而,隨著設備數量和種類的增加,…

RocketMQ總結

深入理解RocketMQ三高架構設計 高性能 順序寫磁盤 mmap 零拷貝異步刷盤 刷盤策略可配置輕量網絡協議 長連接復用 高可用 主從復制機制、controller、dledger集群NameServer 多副本無狀態客戶端自動切換 Broker消息刷盤機制保障可靠性 高可擴展性 Broker 水平擴展Consu…

vue3+tdesign實現明暗主題切換

很多項目中有些會涉及到明暗主題切換的功能,今天就來梳理一下有關這方面的具體實現步驟和使用到的方法,本篇文章使用到的組件是tdesign,利用部分案例,主要闡述明暗主題切換的技術原理和實現步驟,僅供參考。 目錄 一、…

goland 的 dug 設置

brew install delve # 或通過go install go install github.com/go-delve/delve/cmd/dlvlatestwhere dlvdlv.path/your/path/to/dlv環境變量 DEPLOY_MODEprivate;EGO_DEBUGtrue;EGO_MODEdev;MO_MODEdev;PD_MODEco;PRODUCT_MODEall

CVE-2020-1938源碼分析與漏洞復現(Tomcat 文件包含/讀取)

漏洞概述 漏洞名稱:Tomcat AJP協議文件包含/讀取漏洞(Ghostcat) CVE 編號:CVE-2020-1938 CVSS 評分:9.8 影響版本: Apache Tomcat 6.x (≤ 6.0.53)Apache Tomcat 7.x (≤ 7.0.99)Apache Tomcat 8.x (≤ 8…

基于51單片機的簡易打鈴系統

目錄 具體實現功能 設計介紹 資料內容 全部內容 資料獲取 具體實現功能 具體功能: (1)實時顯示當前時間(時、分、秒),LED模式指示燈亮;4個按鍵可以調整時間的時和分。 (2&…

vue+cesium示例:3D熱力圖(附源碼下載)

接到一位知識星友的邀請,隨機模擬三維數據點,結合heatmap.js實現基于cesiumvue的3D熱力圖需求,適合學習Cesium與前端框架結合開發3D可視化項目。 demo源碼運行環境以及配置 運行環境:依賴Node安裝環境,demo本地Node版本…

批處理實現:自動抓取perfetto日志 自動導出到當前文件夾 自動打開分析頁面

序言 最近在研究性能問題需要抓取trace文件。于是寫了個腳本 使用 雙擊運行批處理文件,可以開始記錄trace。而且以當前文件夾下面的。config.pbtx 作為配置文件。 (pbtx就是一個json文件。配置了需要抓取那些參數,可以通過https://ui.per…

未來機器人的大腦:如何用神經網絡模擬器實現更智能的決策?

編輯:陳萍萍的公主一點人工一點智能 未來機器人的大腦:如何用神經網絡模擬器實現更智能的決策?RWM通過雙自回歸機制有效解決了復合誤差、部分可觀測性和隨機動力學等關鍵挑戰,在不依賴領域特定歸納偏見的條件下實現了卓越的預測準…

??Promise代碼理解

1.事件循環與 Promise 執行順序 案例 1:基礎 Promise 同步異步區分 console.log(1); new Promise(resolve > {console.log(2);resolve();console.log(3); }).then(() > console.log(4)); console.log(5); 輸出順序:1,2,3…

57、原生組件注入-【源碼分析】DispatcherServlet注入原理

57、原生組件注入DispatcherServlet注入原理 #### 繼承關系 - DispatcherServlet繼承自FrameworkServlet,而FrameworkServlet繼承自HttpServletBean,最終HttpServletBean繼承自HttpServlet。 - DispatcherServlet實現了ApplicationContextAware接口。 …

【動手學深度學習】3.5. 圖像分類數據集

目錄 3.5. 圖像分類數據集1)讀取數據集2)讀取小批量3)整合所有組件4)小結 . 3.5. 圖像分類數據集 我們將使用Fashion-MNIST數據集,作為圖像分類數據集。 %matplotlib inline import torch import torchvision from …

Python的格式化輸入輸出

# Python 的格式化輸出和格式化輸入## 格式化輸出Python 提供了多種字符串格式化的方法:### 1. % 格式化(舊式格式化)python name "Alice" age 25 print("Name: %s, Age: %d" % (name, age)) # 輸出: Name: Alice, Age…

day65—回溯—單詞搜索(LeetCode-79)

題目描述 給定一個 m x n 二維字符網格 board 和一個字符串單詞 word 。如果 word 存在于網格中,返回 true ;否則,返回 false 。 單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相…