DVWA靶場保姆級通關教程--03CSRF跨站請求偽造

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 目錄

    文章目錄

    前言

    一、low級別的源碼分析

    二、medium級別源碼分析

    安全性分析

    增加了一層 Referer 驗證:

    關鍵點是:在真實的網絡環境中,攻擊者并不需要(也不可能)攔截或修改用戶的請求

    常見誘導方式

    1. 自動提交表單(偽裝成廣告或頁面跳轉)

    2. 隱藏在圖片標簽中(GET 請求時)

    3. 模擬跳轉頁面?

    攻擊者利用的是:

    三、high級別源碼分析

    當前 High 級別 CSRF 防御機制:

    也就是說:

    附加說明(常見誤區):

    四、impossible級別源碼分析

    1. 引入了 CSRF Token 校驗

    2. 使用了預處理語句(Prepared Statements)

    3. 增加了密碼確認機制

    4. 錯誤處理和反饋更加清晰

    5. 密文加密

    6. 會話令牌(Session Token)管理

    總結


前言

CSRF(Cross-Site Request Forgery,跨站請求偽造)是一種常見的Web安全攻擊方式。它的核心思想是:

攻擊者誘導用戶在已經登錄認證的情況下,發起一個偽造的請求到受信任的網站,從而在用戶不知情的情況下完成一些惡意操作。

圖示如下:


提示:以下是本篇文章正文內容,下面案例可供參考

一、low級別的源碼分析

<?php// 如果用戶提交了 Change 參數(通過 GET 請求)
if( isset( $_GET[ 'Change' ] ) ) {// 獲取新密碼和確認密碼的值$pass_new  = $_GET[ 'password_new' ];     // 新密碼$pass_conf = $_GET[ 'password_conf' ];    // 確認密碼// 檢查兩次輸入的密碼是否一致if( $pass_new == $pass_conf ) {// 如果一致,則進行下一步處理// 對新密碼進行 SQL 轉義,防止 SQL 注入(不過這里寫法比較老舊)$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// 使用 MD5 對密碼加密(不安全,但這是示例)$pass_new = md5( $pass_new );// 構造 SQL 更新語句,將當前用戶的密碼更新為新密碼$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";// 執行 SQL 更新操作$result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );// 給用戶的提示信息:密碼修改成功echo "<pre>Password Changed.</pre>";}else {// 如果密碼不一致,提示錯誤echo "<pre>Passwords did not match.</pre>";}// 關閉數據庫連接((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?>

這里雖然修改密碼失敗,但是可以通過URL發現,修改密碼的操作是通過get傳參提交了一個change的請求,打開一個新的頁面直接在地址欄修改,前提是打開一個新的頁面發現用戶并沒退出登錄,類似點擊了一個a(img)(form)標簽跳轉到一個新的頁面,使用這個已登錄用戶的session信息進行驗證

在新的標簽構造修改密碼的URL如下:

  • 修改密碼使用 GET 請求(不安全)。

  • 用戶已登錄,瀏覽器會自動帶上 Cookie。

  • 所以即使在新窗口點擊鏈接打開,只要用戶沒退出登錄,就會生效。

  • 攻擊者就能通過構造 URL + 誘導點擊,悄悄修改密碼。

二、medium級別源碼分析

<?php// 判斷用戶是否提交了 GET 參數 Change
if( isset( $_GET[ 'Change' ] ) ) {// 驗證請求是否來自本站,即檢查 Referer 是否包含當前服務器域名if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false ) {// 獲取用戶輸入的新密碼和確認密碼$pass_new  = $_GET[ 'password_new' ];$pass_conf = $_GET[ 'password_conf' ];// 檢查兩次輸入是否一致if( $pass_new == $pass_conf ) {// SQL 過濾 + MD5 加密(仍然不安全,僅用于演示)$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));$pass_new = md5( $pass_new );// 執行 SQL 更新語句$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";$result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );// 顯示提示信息echo "<pre>Password Changed.</pre>";}else {// 密碼不一致,報錯echo "<pre>Passwords did not match.</pre>";}}else {// 如果 Referer 不可信,拒絕請求echo "<pre>That request didn't look correct.</pre>";}// 關閉數據庫連接((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?>

安全性分析

增加了一層 Referer 驗證:

Referer(HTTP 頭部的一部分) 是瀏覽器在發起請求時自動攜帶的信息,用于告訴服務器:

“這個請求是從哪個頁面跳轉過來的”。

if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false )
  • 作用:防止來自第三方頁面(例如攻擊者網站)的請求。

  • 原理:合法請求應來自當前站點的頁面,Referer 會包含本站域名。

  • 攻擊者如果在自己的頁面發起請求,Referer 通常不會包含受害網站域名,因此會被攔截。

這里如果還是用low級別的方法在一個新的頁面構造修改密碼的請求,會報錯。主要就是referer的參數沒有和第一個請求的時候保持一致,那么先正常修改密碼,通過burpsuite抓包看一下referer字段的參數值是多少

打開一個新的頁面構造修改密碼的URL:http://127.0.0.1:8080/dvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#

此時修改密碼是失敗的,通過抓包查看,可以看到沒有Referer字段值,將數據包發送repeater重發模塊

在數據包重放模塊中、在get請求和referer字段同時修改、你現在想修改的密碼:比如123456,點擊send發送,查看返回值發現修改成功

關鍵點是:在真實的網絡環境中,攻擊者并不需要(也不可能)攔截或修改用戶的請求

攻擊者誘導用戶自己去發出“合法的請求”,并利用用戶的登錄狀態(如 Cookie 中的 session)完成敏感操作。

?攻擊者構造如下 HTML 頁面,誘導用戶點擊或自動訪問,造成好像是一個正常廣告彈窗或是頁面跳轉再或者頁面一閃而過的這種現象,讓用戶以為自己并沒有受到攻擊:

常見誘導方式

1. 自動提交表單(偽裝成廣告或頁面跳轉)

<html><head><meta charset="utf-8"><title>加載中...</title></head><body onload="document.forms[0].submit()"><p>頁面加載中,請稍后...</p><form action="http://127.0.0.1:8080/dvwa/vulnerabilities/csrf/" method="GET"><input type="hidden" name="password_new" value="1234" /><input type="hidden" name="password_conf" value="1234" /><input type="hidden" name="Change" value="Change" /></form></body>
</html>

?效果:用戶訪問頁面那一刻就完成了請求,頁面一閃而過,就像跳轉一樣,背后卻是密碼被修改。

2. 隱藏在圖片標簽中(GET 請求時)

<img src="http://127.0.0.1:8080/dvwa/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change" style="display:none;" />

3. 模擬跳轉頁面?

<script>// 等待1秒再跳轉,模擬正常流程setTimeout(function() {window.location.href = 'https://example.com';}, 1000);
</script>

?配合自動提交表單,造成“訪問了一個頁面 -> 跳轉正常頁面”,從而掩蓋 CSRF 攻擊。

攻擊者利用的是:

  • 用戶處于已登錄狀態

  • 瀏覽器會自動攜帶 Cookie

  • 請求結構與正常請求無差別;

  • 用戶以為只是“點錯了廣告”或“頁面加載了一下”。

三、high級別源碼分析

<?php// 判斷是否點擊了“Change”按鈕
if( isset( $_POST[ 'Change' ] ) ) {// 檢查 Anti-CSRF 令牌是否匹配(防止偽造請求)if ($_POST['user_token'] == $_SESSION['session_token']) {// 獲取用戶輸入的新密碼和確認密碼$pass_new  = $_POST[ 'password_new' ];$pass_conf = $_POST[ 'password_conf' ];// 判斷兩個密碼是否一致if( $pass_new == $pass_conf ) {// 密碼一致,開始處理// 對新密碼進行轉義,防止SQL注入$pass_new = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass_new);// 對密碼進行MD5加密(注意:實際應用中不推薦使用MD5)$pass_new = md5( $pass_new );// 構造 SQL 更新語句,修改當前登錄用戶的密碼$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";// 執行 SQL 更新操作$result = mysqli_query($GLOBALS["___mysqli_ston"], $insert ) or die( '<pre>' . mysqli_error($GLOBALS["___mysqli_ston"]) . '</pre>' );// 修改成功,反饋給用戶echo "<pre>Password Changed.</pre>";} else {// 兩次密碼輸入不一致,提示錯誤echo "<pre>Passwords did not match.</pre>";}} else {// CSRF token 不匹配,提示錯誤echo "<pre>CSRF token is incorrect</pre>";}
}?>

當前 High 級別 CSRF 防御機制:

  1. 攻擊者構造表單時

    • 表單里的 user_token 是攻擊者自己從頁面里復制下來的(靜態)。

    • 這個 token 屬于攻擊者自己的 session,和受害者無關。

  2. 受害者點擊攻擊鏈接時

    • 表單是提交到了 DVWA,但服務器會拿 GET 請求里的 user_token 去和受害者 session 中真正的 token 做對比。

    • 由于兩個 token 不一致(攻擊者不能預測受害者的 token),校驗失敗。

    • 最終返回:“That request didn’t look correct.”


也就是說:

DVWA High 級別的防御邏輯可以總結為:

🔒 驗證 token 是否和當前 session 匹配,匹配才能執行敏感操作(如改密碼)。

所以只要你作為攻擊者 無法控制受害者 session 中的 token 值,你就不能完成攻擊 ?


附加說明(常見誤區):

誤解真相
我復制了token,能不能直接用?? 不行,因為那是你自己的,不是受害者的
用戶打開了我的頁面,是不是能自動提交?? 表單可以提交,但服務器不會放行
我偽造Referer或者User-Agent就能騙過嗎?? 在 High 級別中,主要靠 token 防御,Referer 檢查不是核心


可以試試 如何繞過 token 機制(比如通過 XSS 拿 token),這才是后續更高階的玩法。由于這個已經不是純粹的csrf了,所以這里不做其他嘗試。

四、impossible級別源碼分析

if( isset( $_GET[ 'Change' ] ) ) {  // 判斷是否點擊了“Change”按鈕,即URL中是否有Change參數// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );  // 校驗請求中傳入的token與session中的token是否一致,防止CSRF攻擊// Get input$pass_curr = $_GET[ 'password_current' ];  // 獲取當前密碼$pass_new  = $_GET[ 'password_new' ];  // 獲取新密碼$pass_conf = $_GET[ 'password_conf' ];  // 獲取確認的新密碼// Sanitise current password input$pass_curr = stripslashes( $pass_curr );  // 去除可能的轉義字符$pass_curr = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_curr ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));  // 對密碼進行SQL注入防護,防止惡意代碼注入$pass_curr = md5( $pass_curr );  // 將密碼進行md5加密// Check that the current password is correct$data = $db->prepare( 'SELECT password FROM users WHERE user = (:user) AND password = (:password) LIMIT 1;' );  // 查詢數據庫,驗證當前密碼是否正確$data->bindParam( ':user', dvwaCurrentUser(), PDO::PARAM_STR );  // 獲取當前用戶$data->bindParam( ':password', $pass_curr, PDO::PARAM_STR );  // 綁定加密后的當前密碼$data->execute();  // 執行查詢// Do both new passwords match and does the current password match the user?if( ( $pass_new == $pass_conf ) && ( $data->rowCount() == 1 ) ) {  // 檢查新密碼是否一致,且當前密碼是否正確// It does!$pass_new = stripslashes( $pass_new );  // 去除新密碼中的轉義字符$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));  // 對新密碼進行SQL注入防護$pass_new = md5( $pass_new );  // 將新密碼進行md5加密// Update database with new password$data = $db->prepare( 'UPDATE users SET password = (:password) WHERE user = (:user);' );  // 更新數據庫中的密碼$data->bindParam( ':password', $pass_new, PDO::PARAM_STR );  // 綁定新密碼$data->bindParam( ':user', dvwaCurrentUser(), PDO::PARAM_STR );  // 綁定當前用戶$data->execute();  // 執行密碼更新// Feedback for the userecho "<pre>Password Changed.</pre>";  // 密碼修改成功的反饋}else {// Issue with passwords matchingecho "<pre>Passwords did not match or current password incorrect.</pre>";  // 密碼不匹配或當前密碼錯誤的反饋}
}// Generate Anti-CSRF token
generateSessionToken();  // 生成新的CSRF token并保存在session中,以防下一次攻擊

相比于 medium.phpimpossible.php 在防止 CSRF 攻擊和增強安全性方面有顯著的提升,主要體現在以下幾個方面:

1. 引入了 CSRF Token 校驗

  • medium.php 中并沒有明確驗證 CSRF Token。攻擊者可以構造惡意請求,只要用戶不注意,就可能修改密碼。

  • impossible.php 引入了 checkToken() 函數來驗證 CSRF Token。每次用戶發起請求時,必須攜帶有效的 user_token(即從用戶的 session 中生成并與頁面一同呈現的 token)。這樣就防止了 CSRF 攻擊,因為攻擊者無法預測或偽造正確的 CSRF Token

關鍵代碼

checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

該函數會比對請求中的 user_token 與當前 session 中存儲的 session_token,如果不匹配,則請求會被拒絕。

2. 使用了預處理語句(Prepared Statements)

  • medium.php 通過直接拼接 SQL 查詢來更新數據庫,雖然使用了 mysqli_real_escape_string() 防止 SQL 注入,但這種做法依然不夠安全,因為它易受復雜注入攻擊的影響。

  • impossible.php 使用了 PDO 預處理語句來執行數據庫操作,提供了更高的 SQL 注入防護,因為它通過綁定參數的方式來避免 SQL 注入風險。并且這種方法更具可擴展性和維護性。

關鍵代碼

$data = $db->prepare( 'SELECT password FROM users WHERE user = (:user) AND password = (:password) LIMIT 1;' );
$data->bindParam( ':user', dvwaCurrentUser(), PDO::PARAM_STR );
$data->bindParam( ':password', $pass_curr, PDO::PARAM_STR );
$data->execute();

3. 增加了密碼確認機制

  • medium.php 僅檢查新密碼和確認密碼是否一致。

  • impossible.php 進一步增加了對 當前密碼 的驗證,確保用戶提供的當前密碼是正確的,并且只有在當前密碼正確的情況下,才允許更改新密碼。

關鍵代碼

$data = $db->prepare( 'SELECT password FROM users WHERE user = (:user) AND password = (:password) LIMIT 1;' );
$data->bindParam( ':user', dvwaCurrentUser(), PDO::PARAM_STR );
$data->bindParam( ':password', $pass_curr, PDO::PARAM_STR );
$data->execute();

4. 錯誤處理和反饋更加清晰

  • medium.php 直接打印錯誤信息或反饋內容,但在一些情況下錯誤信息可能泄露一些內部系統信息。

  • impossible.php 做了適當的錯誤處理,向用戶提供了更清晰的反饋,區分了不同的錯誤情況,如密碼不匹配或當前密碼錯誤,增強了用戶體驗和系統的安全性。

5. 密文加密

  • medium.php 中,密碼使用 MD5 進行加密,但沒有明確提到加鹽(Salt)等其他加密增強措施。

  • impossible.php 雖然仍然使用了 MD5 加密(不夠安全),但其增加了對輸入的字符串的 清洗SQL注入防護,這比 medium.php 的做法要安全一些,尤其是在防止惡意注入方面。

6. 會話令牌(Session Token)管理

  • impossible.php 中,成功修改密碼后,生成了新的 CSRF Token,并將其存儲在 Session 中。這種機制防止了同一會話中多次提交相同的惡意請求,增強了會話的安全性。

關鍵代碼

generateSessionToken();  // 生成新的CSRF token并保存在session中

總結

impossible.php 相比于 medium.php 增強了安全性,尤其在防止 CSRF 攻擊SQL 注入 方面。通過引入 CSRF Token 校驗,使用 PDO 預處理語句,以及 當前密碼驗證,使得該頁面更加健壯和安全。雖然依然使用了 MD5 加密算法,理論上仍然可以進一步加強密碼存儲的安全性(如使用更強的哈希算法,比如 bcrypt),但其加強的防護措施已顯著降低了攻擊的風險。

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

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

相關文章

【Ansible自動化運維實戰:從Playbook到負載均衡指南】

本文是「VagrantVirtualBox虛擬化環境搭建」的續篇&#xff0c;深入探索Ansible在自動化運維中的核心應用&#xff1a; ? Ansible核心技能&#xff1a;Playbook編寫、角色&#xff08;Roles&#xff09;模塊化、標簽&#xff08;Tags&#xff09;精準控制 ? 實戰場景覆蓋&a…

基于STM32、HAL庫的STC31-C-R3氣體傳感器驅動程序設計

一、簡介: STC31-C-R3是Sensirion公司推出的一款基于CMOSens技術的CO2傳感器,具有以下特點: 測量范圍:0-100%體積濃度 I2C數字接口 低功耗設計 高精度和長期穩定性 小尺寸封裝(5mm x 5mm) 二、硬件接口: STC31-C-R3 STM32L4xx ---------------------------- VDD (P…

Nginx篇之限制公網IP訪問特定接口url實操

一、nginx配置限制IP訪問 要在 Nginx 配置中添加 IP 限制&#xff0c;阻止來自指定公網 IP 地址段的訪問&#xff0c;并且只對特定路徑進行限制&#xff0c;可以在 location 配置中使用 deny 和 allow 指令來控制訪問。 二、案例 1. 需求 對來自特定公網的地址段&#xff0…

算法研習:無重復字符的最長子串問題剖析

算法研習:無重復字符的最長子串問題剖析 一、引言 在算法的廣袤天地中,字符串相關問題一直是備受關注的焦點。“無重復字符的最長子串”這一問題,不僅在面試中頻繁出現,更是對算法思維和編程技巧的一次深度考驗。它要求我們從給定字符串中找出不含有重復字符的最長子串的長…

Spring Cloud Gateway路由+斷言+過濾

目錄 介紹核心功能三大核心Route以服務名動態獲取URLPredicate常用斷言Path Route PredicateAfter Route PredicateBefore Route PredicateBetween Route PredicateCookie Route PredicateHeader Route PredicateHost Route PredicateQuery Route PredicateRemoteAddr Route Pr…

springboot集成langchain4j記憶對話

流式輸出 LLM 一次生成一個標記&#xff08;token&#xff09;&#xff0c;因此許多 LLM 提供商提供了一種方式&#xff0c;可以逐個標記地流式傳輸響應&#xff0c;而不是等待整個文本生成完畢。 這顯著改善了用戶體驗&#xff0c;因為用戶不需要等待未知的時間&#xff0c;幾…

【SpringCloud GateWay】Connection prematurely closed BEFORE response 報錯分析與解決方案

一、背景 今天業務方調用我們的網關服務報錯: Connection prematurely closed BEFORE response二、原因分析 三、解決方案 第一步: 增加 SCG 服務的JVM啟動參數,調整連接獲取策略。 將連接池獲取策略由默認的 FIFO&#xff08;先進先出&#xff09;變更為 LIFO&#xff08…

使用ZYNQ芯片和LVGL框架實現用戶高刷新UI設計系列教程(第十一講)

這一期講解lvgl中下拉框的基礎使用&#xff0c;下拉列表允許用戶從選項列表中選擇一個值&#xff0c;下拉列表的選項表默認是關閉的&#xff0c;其中的選項可以是單個值或預定義文本。 當單擊下拉列表后&#xff0c;其將創建一個列表&#xff0c;用戶可以從中選擇一個選項。 當…

【神經網絡與深度學習】VAE 在解碼前進行重參數化

在 VAE 中&#xff0c;解碼之前進行重參數化主要有以下幾個重要原因&#xff1a; 可微分性 在深度學習里&#xff0c;模型是通過反向傳播算法來學習的&#xff0c;而這需要計算梯度。若直接從潛在變量的分布 (q_{\theta}(z|x))&#xff08;由編碼器輸出的均值 (\mu) 和方差 (…

BBDM學習筆記

1. configs 1.1 LBBDM: Latent BBDM [readme]

mysql主從復制搭建,并基于?Keepalived + VIP實現高可用

以下是基于 ?Keepalived VIP? 實現 MySQL 主從復制高可用的詳細步驟&#xff0c;涵蓋主從復制搭建與故障自動切換&#xff1a; 一、MySQL 主從復制搭建&#xff08;基礎步驟回顧&#xff09; 1. ?主庫&#xff08;Master&#xff09;配置? 修改配置文件? /etc/my.cnf&…

CD36.【C++ Dev】STL庫的string的使用 (下)

目錄 1.reserve函數(不是reverse) 代碼示例 2.resize 代碼示例 3.reserve和resize的區別 4.shrink_to_fit 代碼示例 5.與C語言的配合的接口函數: c_str 代碼示例 6.rfind 知識回顧:find函數 rfind 代碼示例 練習題: 字符串最后一個單詞的長度 代碼 提交結果 ?…

STM32的網絡天氣時鐘項目

一、項目概述與硬件架構 1.1 核心功能 本智能天氣時鐘系統集成了實時天氣獲取、網絡時間同步、環境監測和低功耗管理四大核心功能&#xff1a; 網絡數據獲取&#xff1a; 通過ESP8266 WiFi模塊連接心知天氣API&#xff08;每小時更新&#xff09;獲取北京標準時間服務器的時…

FPGA DDR4多通道管理控制器設計

DDR4控制器一般采用自帶的MIG控制器&#xff0c;用戶控制主要是基于MIG IP核進行設計 實際工程項目中可能只掛載了一組DDR&#xff0c;但是用戶數據可能有很多種&#xff0c;用戶通過給每種數據劃分特定地址進行存儲&#xff0c;如何實現靈活管理成為設計的關鍵 為了方便后端數…

低代碼 x AI,解鎖數智化應用的創新引擎

AI 智能體開發指南 隨著全球信息化浪潮的持續推進&#xff0c;數字化、智能化轉型已成為企業發展的必經之路。在這個變革的時代&#xff0c;企業面臨著前所未有的挑戰與機遇。一方面&#xff0c;市場環境瞬息萬變&#xff0c;企業需要快速響應并調整業務模式&#xff1b;另一方…

【Spring Boot 注解】@Configuration與@AutoConfiguration

文章目錄 Configuration與AutoConfiguration一、Configuration二、AutoConfiguration Configuration與AutoConfiguration 一、Configuration 這是最常用的 Spring 注解之一&#xff0c;表示當前類是一個 配置類&#xff0c;可以定義 Bean 方法&#xff0c;等效于傳統的 XML 配…

arXiv論文 MALOnt: An Ontology for Malware Threat Intelligence

文章講惡意軟件威脅情報本體。 作者信息 作者是老美的&#xff0c;單位是倫斯勒理工學院&#xff0c;文章是2020年的預印本&#xff0c;不知道后來發表在哪里&#xff08;沒搜到&#xff0c;或許作者懶得投稿&#xff0c;也可能是改了標題&#xff09;。 中心思想 介紹開源…

【存儲管理—動態不等長存儲資源分配算法】

文章目錄 一、實驗目的二、實驗內容與設計思想實驗內容設計思路 三、實驗代碼實現四、總結 一、實驗目的 理解動態異長存儲分區資源管理&#xff0c;掌握所需數據結構和管理程序&#xff0c;了解各種存儲分配算法的優點和缺點。 二、實驗內容與設計思想 實驗內容 1.分析uni…

快速上手 Docker:從入門到安裝的簡易指南(Mac、Windows、Ubuntu)

PS&#xff1a;筆者在五一剛回來一直搞Docker部署AI項目&#xff0c;發現從開發環境遷移到生成環境時&#xff0c;Docker非常好用。但真的有一定上手難度&#xff0c;推薦讀者多自己嘗試踩踩坑。 本篇幅有限&#xff0c;使用與修改另起篇幅。 一、Docker是什么 #1. Docker是什…

LabVIEW高沖擊加速度校準系統

在國防科技領域&#xff0c;高 g 值加速度傳感器廣泛應用于先進兵器研制&#xff0c;如深侵徹系統、精確打擊彈藥及鉆地彈藥等。其性能指標直接影響研究結果的準確性與可靠性&#xff0c;因此對該傳感器進行定期校準意義重大。高沖擊加速度校準系統具備多方面功能&#xff0c;適…