開源入侵防御系統——CrowdSec

1、簡介

CrowdSec?是一款現代化、開源、基于行為的入侵防御系統(IDS/IPS),專為保護服務器、服務、容器、云原生應用而設計。它通過分析日志檢測可疑行為,并可基于社區協作共享惡意 IP 黑名單,從而實現分布式防御。

其理念源于 Fail2Ban,但 CrowdSec 更現代、更可擴展,具備強大的可視化和自動化能力。

項目地址:https://github.com/crowdsecurity/crowdsec?

2、主要特點

特性描述
開源免費完全開源,MIT 許可,無強制商業組件
模塊化架構解耦式架構,支持插件化擴展(例如不同的日志源、解析器、響應器)
日志行為分析基于日志行為檢測異常,如 SSH 暴力破解、Web 攻擊等
社區威脅共享通過 CrowdSec 社區共享惡意 IP 列表(CTI:Cyber Threat Intelligence)
多平臺支持支持 Linux、BSD、Docker、Kubernetes 等環境
多語言通知與響應支持自動封禁、郵件、Slack、Webhook、Cloudflare 等響應方式
可視化 Dashboard基于 Metabase 的 Web UI,提供可視化分析

3、應用場景

  • 企業級服務器 SSH 暴力破解防護。

  • Web 應用防御(包括 Nginx、Apache、HAProxy 日志)。

  • Kubernetes 集群安全審計與防護。

  • 公有云/私有云中的入侵檢測與響應。

  • 與防火墻、WAF 聯動實現動態封禁。

  • DevOps 安全加固及日志威脅可視化。

4、主要組件

圖片

  • CrowdSec 代理(Agent):分析 Nginx 和系統日志,檢測可疑行為。

  • 本地 API(LAPI):連接代理與防護組件。

  • 防護組件(Bouncer):阻止惡意流量,支持 Nginx、防火墻等多種方式。

  • 命令行工具(cscli):管理配置和決策。

5、工具對比

以下是 CrowdSec 與 Fail2Ban 和 Suricata 在保護 Nginx 部署的 Cilikube 項目時的對比:

特性/工具CrowdSecFail2BanSuricata
開源性開源開源開源
威脅情報社區共享,實時更新惡意 IP本地規則,無共享依賴規則集,免費規則延遲 30 天
Web 防護原生支持 Nginx,防護 SQL 注入、XSS 等需手動配置正則規則依賴流量分析,需額外配置
檢測方式日志分析,適合 Nginx日志正則匹配網絡流量分析
防護方式Nginx 集成、防火墻等多層次僅防火墻規則依賴防火墻或專用設備
易用性CLI 和 Web 儀表盤,易于配置配置簡單,無 Web 界面配置復雜,需專業知識
性能影響輕量,適合 Ubuntu輕量流量分析,資源占用高
Fail2Ban 的差異
  • Web 防護:CrowdSec 提供原生 Nginx 防護組件,可直接處理 HTTP 攻擊(如針對 Cilikube 的路徑遍歷);Fail2Ban 需手動編寫正則規則,配置還是比較復雜。

  • 威脅情報:CrowdSec 的社區共享機制能快速識別全球攻擊者,Fail2Ban 僅依賴本地日志。

  • 擴展性:CrowdSec 的 Hub 提供豐富的 Web 攻擊場景,Fail2Ban 擴展性有限。

Suricata 的差異
  • 資源占用:CrowdSec 基于日志分析,適合資源有限的 Ubuntu 服務器;Suricata 需分析網絡流量,消耗較高。

  • Nginx 集成:CrowdSec 提供開箱即用的防護組件,Suricata 需復雜配置。

  • 實時性:CrowdSec 實時共享威脅情報,Suricata 免費規則延遲 30 天。

6、安裝部署(centos7)

curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.rpm.sh | bash
yum? update? -y
yum install crowdsec -y?###安裝完成后服務會自啟動
systemctl status crowdsec

7、查看防護狀態

列出已安裝的防護場景
####默認會安裝ssh防爆破規則cscli collections list
────────────────────────────────────────────────────────────────────────────────COLLECTIONS                                                                    
────────────────────────────────────────────────────────────────────────────────Name                📦 Status     Version  Local Path                          
────────────────────────────────────────────────────────────────────────────────crowdsecurity/sshd  ??  enabled  0.7      /etc/crowdsec/collections/sshd.yaml 
────────────────────────────────────────────────────────────────────────────────cscli scenarios list
────────────────────────────────────────────────────────────────────────────────────────────────────────SCENARIOS                                                                                              
────────────────────────────────────────────────────────────────────────────────────────────────────────Name                             📦 Status     Version  Local Path                                     
────────────────────────────────────────────────────────────────────────────────────────────────────────crowdsecurity/ssh-bf             ??  enabled  0.3      /etc/crowdsec/scenarios/ssh-bf.yaml            crowdsecurity/ssh-cve-2024-6387  ??  enabled  0.2      /etc/crowdsec/scenarios/ssh-cve-2024-6387.yaml crowdsecurity/ssh-generic-test   ??  enabled  0.2      /etc/crowdsec/scenarios/ssh-generic-test.yaml  crowdsecurity/ssh-refused-conn   ??  enabled  0.1      /etc/crowdsec/scenarios/ssh-refused-conn.yaml  crowdsecurity/ssh-slow-bf        ??  enabled  0.4      /etc/crowdsec/scenarios/ssh-slow-bf.yaml       
────────────────────────────────────────────────────────────────────────────────────────────────────────###查看封禁ip
cscli decisions list
 

8、測試ssh防爆破封禁

采集原理:ssh爆破日志-----/var/log/secure----syslog去采集-----ssh-bf.yaml去正則匹配日志分析、符合條件觸發---alerts報警-----封禁

1)、采集日志是否安裝

cscli parsers list
───────────────────────────────────────────────────────────────────────────────────────────────────PARSERS                                                                                           
───────────────────────────────────────────────────────────────────────────────────────────────────Name                      📦 Status     Version  Local Path                                       
───────────────────────────────────────────────────────────────────────────────────────────────────crowdsecurity/sshd-logs   ??  enabled  3.0      /etc/crowdsec/parsers/s01-parse/sshd-logs.yaml   crowdsecurity/whitelists  ??  enabled  0.3      /etc/crowdsec/parsers/s02-enrich/whitelists.yaml 
───────────────────────────────────────────────────────────────────────────────────────────────────

安裝syslog

root@test:~# cscli parsers install crowdsecurity/syslog-logs
Action plan:
? enableparsers: crowdsecurity/syslog-logsenabling parsers:crowdsecurity/syslog-logsRun 'sudo systemctl reload crowdsec' for the new configuration to be effective.
root@test:~# systemctl restart crowdsec
root@test:~# cscli parsers list
────────────────────────────────────────────────────────────────────────────────────────────────────PARSERS                                                                                            
────────────────────────────────────────────────────────────────────────────────────────────────────Name                       📦 Status     Version  Local Path                                       
────────────────────────────────────────────────────────────────────────────────────────────────────crowdsecurity/sshd-logs    ??  enabled  3.0      /etc/crowdsec/parsers/s01-parse/sshd-logs.yaml   crowdsecurity/syslog-logs  ??  enabled  0.8      /etc/crowdsec/parsers/s00-raw/syslog-logs.yaml   crowdsecurity/whitelists   ??  enabled  0.3      /etc/crowdsec/parsers/s02-enrich/whitelists.yaml 
────────────────────────────────────────────────────────────────────────────────────────────────────###安裝防火墻方式攔截
yum install -y crowdsec-firewall-bouncer-iptables

2)、采集配置,默認已經配置好了,不用修改

root@test:/etc/crowdsec# cat acquis.yaml 
#Generated acquisition file - wizard.sh (service: sshd) / files : /var/log/secure
filenames:- /var/log/secure
labels:type: syslog
---
#Generated acquisition file - wizard.sh (service: linux) / files : /var/log/messages
filenames:- /var/log/messages
labels:type: syslog
---

3)、修改日志格式,系統產生的格式一定要符合CrowdSec采集規則、否則無法命中

####主要是為了讓/var/log/secure里面記錄的規則符合CrowdSec采集的匹配vim /etc/rsyslog.conf ###注釋這一行
#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat加入這三行
$LocalHostName localhost
$template MyTraditionalFormat,"%timegenerated% %hostname% %syslogtag% %msg%\n"
$ActionFileDefaultTemplate  MyTraditionalFormatsystemctl restart rsyslog#####默認白名單規則里面加入了私網,為了測試注銷掉和內網相同的網段vim /etc/crowdsec/parsers/s02-enrich/whitelists.yaml name: crowdsecurity/whitelists
description: "Whitelist events from private ipv4 addresses"
whitelist:reason: "private ipv4/ipv6 ip/ranges"ip:- "::1"cidr:
#    - "127.0.0.0/8"
#    - "192.168.0.0/16"- "10.0.0.0/8"- "172.16.0.0/12"# expression:#   - "'foo.com' in evt.Meta.source_ip.reverse" systemctl restart crowdsec

4)、測試

####原始狀態,主要看Lines parsed現在是0,就代表沒有讀到任何日志匹配項
root@test:/etc/crowdsec# cscli metrics
╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Acquisition Metrics                                                                                                   │
├────────────────────────┬────────────┬──────────────┬────────────────┬────────────────────────┬───────────────────┤
│ Source                 │ Lines read │ Lines parsed │ Lines unparsed │ Lines poured to bucket │ Lines whitelisted │
├────────────────────────┼────────────┼──────────────┼────────────────┼────────────────────────┼───────────────────┤
│ file:/var/log/messages │ 21         │ -            │ 21             │ -                      │ -                 │
│ file:/var/log/secure   │ 2          │ -            │ 2              │ -                      │ -                 │
╰────────────────────────┴────────────┴──────────────┴────────────────┴────────────────────────┴───────────────────╯
╭─────────────────────────────────────────────╮
│ Local API Decisions                         │
├────────────────┬────────┬────────┬───────┤
│ Reason         │ Origin │ Action │ Count │
├────────────────┼────────┼────────┼───────┤
│ generic:scan   │ CAPI   │ ban    │ 3499  │
│ ssh:bruteforce │ CAPI   │ ban    │ 10266 │
│ ssh:exploit    │ CAPI   │ ban    │ 1230  │
╰────────────────┴────────┴────────┴───────╯
╭──────────────────────────────────────╮
│ Local API Metrics                    │
├────────────────────┬────────┬──────┤
│ Route              │ Method │ Hits │
├────────────────────┼────────┼──────┤
│ /v1/heartbeat      │ GET    │ 25   │
│ /v1/usage-metrics  │ POST   │ 1    │
│ /v1/watchers/login │ POST   │ 1    │
╰────────────────────┴────────┴──────╯
╭─────────────────────────────────────────────────────────────────────────────────────╮
│ Local API Machines Metrics                                                          │
├──────────────────────────────────────────────────┬───────────────┬────────┬──────┤
│ Machine                                          │ Route         │ Method │ Hits │
├──────────────────────────────────────────────────┼───────────────┼────────┼──────┤
│ dd2bb318ae379c408892924592b37d97AJnzSsojiaCqXNKQ │ /v1/heartbeat │ GET    │ 25   │
╰──────────────────────────────────────────────────┴───────────────┴────────┴──────╯
╭───────────────────────────────────────────────────────────────╮
│ Parser Metrics                                                │
├─────────────────────────────────┬──────┬────────┬──────────┤
│ Parsers                         │ Hits │ Parsed │ Unparsed │
├─────────────────────────────────┼──────┼────────┼──────────┤
│ child-crowdsecurity/syslog-logs │ 34   │ 12     │ 22       │
│ crowdsecurity/syslog-logs       │ 23   │ 12     │ 11       │
╰─────────────────────────────────┴──────┴────────┴──────────╯
#####封禁是沒有規則的
root@test:/etc/crowdsec# cscli decisions list
No active decisions

現在另開一臺機器進行爆破實驗,觸發規則后,就被拉入黑名單,無法發送數據了

for i in $(seq 1 10); do   ssh invaliduser@ip -o PasswordAuthentication=yes -o StrictHostKeyChecking=no echo hi; done

### Lines parsed讀到數據,代表解析正常cscli metrics
╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Acquisition Metrics                                                                                                   │
├────────────────────────┬────────────┬──────────────┬────────────────┬────────────────────────┬───────────────────┤
│ Source                 │ Lines read │ Lines parsed │ Lines unparsed │ Lines poured to bucket │ Lines whitelisted │
├────────────────────────┼────────────┼──────────────┼────────────────┼────────────────────────┼───────────────────┤
│ file:/var/log/messages │ 21         │ -            │ 21             │ -                      │ -                 │
│ file:/var/log/secure   │ 22         │ 14           │ 8              │ 32                     │ -                 │
╰────────────────────────┴────────────┴──────────────┴────────────────┴────────────────────────┴───────────────────╯
╭────────────────────────────────────╮
│ Local API Alerts                   │
├───────────────────────────┬───────┤
│ Reason                    │ Count │
├───────────────────────────┼───────┤
│ crowdsecurity/ssh-bf      │ 1     │
│ crowdsecurity/ssh-slow-bf │ 1     │
╰───────────────────────────┴───────╯
╭──────────────────────────────────────────────────────────╮
│ Local API Decisions                                      │
├───────────────────────────┬──────────┬────────┬───────┤
│ Reason                    │ Origin   │ Action │ Count │
├───────────────────────────┼──────────┼────────┼───────┤
│ crowdsecurity/ssh-bf      │ crowdsec │ ban    │ 1     │
│ crowdsecurity/ssh-slow-bf │ crowdsec │ ban    │ 1     │
╰───────────────────────────┴──────────┴────────┴───────╯
╭────────────────────────────────────────╮
│ Local API Metrics                      │
├──────────────────────┬────────┬──────┤
│ Route                │ Method │ Hits │
├──────────────────────┼────────┼──────┤
│ /v1/alerts           │ DELETE │ 1    │
│ /v1/alerts           │ GET    │ 4    │
│ /v1/alerts           │ POST   │ 2    │
│ /v1/decisions        │ DELETE │ 1    │
│ /v1/decisions/stream │ GET    │ 30   │
│ /v1/heartbeat        │ GET    │ 9    │
│ /v1/usage-metrics    │ POST   │ 1    │
│ /v1/watchers/login   │ POST   │ 7    │
╰──────────────────────┴────────┴──────╯
╭──────────────────────────────────────────────────────────────────────────╮
│ Local API Bouncers Metrics                                               │
├────────────────────────────────┬──────────────────────┬────────┬──────┤
│ Bouncer                        │ Route                │ Method │ Hits │
├────────────────────────────────┼──────────────────────┼────────┼──────┤
│ cs-firewall-bouncer-1752116174 │ /v1/decisions/stream │ GET    │ 30   │
╰────────────────────────────────┴──────────────────────┴────────┴──────╯
╭─────────────────────────────────────────────────────────────────────────────────────╮
│ Local API Machines Metrics                                                          │
├──────────────────────────────────────────────────┬───────────────┬────────┬──────┤
│ Machine                                          │ Route         │ Method │ Hits │
├──────────────────────────────────────────────────┼───────────────┼────────┼──────┤
│ dd2bb318ae379c408892924592b37d97AJnzSsojiaCqXNKQ │ /v1/alerts    │ DELETE │ 1    │
│ dd2bb318ae379c408892924592b37d97AJnzSsojiaCqXNKQ │ /v1/alerts    │ GET    │ 4    │
│ dd2bb318ae379c408892924592b37d97AJnzSsojiaCqXNKQ │ /v1/alerts    │ POST   │ 2    │
│ dd2bb318ae379c408892924592b37d97AJnzSsojiaCqXNKQ │ /v1/decisions │ DELETE │ 1    │
│ dd2bb318ae379c408892924592b37d97AJnzSsojiaCqXNKQ │ /v1/heartbeat │ GET    │ 9    │
╰──────────────────────────────────────────────────┴───────────────┴────────┴──────╯
╭───────────────────────────────────────────────────────────────╮
│ Parser Metrics                                                │
├─────────────────────────────────┬──────┬────────┬──────────┤
│ Parsers                         │ Hits │ Parsed │ Unparsed │
├─────────────────────────────────┼──────┼────────┼──────────┤
│ child-crowdsecurity/sshd-logs   │ 216  │ 14     │ 202      │
│ child-crowdsecurity/syslog-logs │ 43   │ 43     │ -        │
│ crowdsecurity/sshd-logs         │ 22   │ 14     │ 8        │
│ crowdsecurity/syslog-logs       │ 43   │ 43     │ -        │
│ crowdsecurity/whitelists        │ 14   │ 14     │ -        │
╰─────────────────────────────────┴──────┴────────┴──────────╯
╭────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Scenario Metrics                                                                                       │
├─────────────────────────────────────┬───────────────┬───────────┬──────────────┬────────┬─────────┤
│ Scenario                            │ Current Count │ Overflows │ Instantiated │ Poured │ Expired │
├─────────────────────────────────────┼───────────────┼───────────┼──────────────┼────────┼─────────┤
│ crowdsecurity/ssh-bf                │ -             │ 2         │ 3            │ 14     │ 1       │
│ crowdsecurity/ssh-bf_user-enum      │ -             │ -         │ 1            │ 2      │ 1       │
│ crowdsecurity/ssh-slow-bf           │ 1             │ 1         │ 2            │ 14     │ -       │
│ crowdsecurity/ssh-slow-bf_user-enum │ 1             │ -         │ 1            │ 2      │ -       │
╰─────────────────────────────────────┴───────────────┴───────────┴──────────────┴────────┴─────────╯
╭────────────────────────────────────────────────────────────────────────────────╮
│ Whitelist Metrics                                                              │
├──────────────────────────┬─────────────────────────────┬──────┬─────────────┤
│ Whitelist                │ Reason                      │ Hits │ Whitelisted │
├──────────────────────────┼─────────────────────────────┼──────┼─────────────┤
│ crowdsecurity/whitelists │ private ipv4/ipv6 ip/ranges │ 14   │ -           │
╰──────────────────────────┴─────────────────────────────┴──────┴─────────────╯#####觸發報警
root@test:/etc/crowdsec# cscli alerts list
╭────┬───────────────────┬───────────────────────────┬─────────┬────┬───────────┬─────────────────────────────────────────╮
│ ID │       value       │           reason          │ country │ as │ decisions │                created_at               │
├────┼───────────────────┼───────────────────────────┼─────────┼────┼───────────┼─────────────────────────────────────────┤
│ 7  │ Ip:192.168.00.000 │ crowdsecurity/ssh-slow-bf │         │    │ ban:1     │ 2025-07-10 02:58:28.626116415 +0000 UTC │
│ 6  │ Ip:192.168.00.000 │ crowdsecurity/ssh-bf      │         │    │ ban:1     │ 2025-07-10 02:58:28.625837032 +0000 UTC │
╰────┴───────────────────┴───────────────────────────┴─────────┴────┴───────────┴─────────────────────────────────────────╯#####封禁ip
root@test:/etc/crowdsec# cscli decisions list
╭───────┬──────────┬───────────────────┬───────────────────────────┬────────┬─────────┬────┬────────┬────────────┬──────────╮
│   ID  │  Source  │    Scope:Value    │           Reason          │ Action │ Country │ AS │ Events │ expiration │ Alert ID │
├───────┼──────────┼───────────────────┼───────────────────────────┼────────┼─────────┼────┼────────┼────────────┼──────────┤
│ 15006 │ crowdsec │ Ip:192.168.00.000 │ crowdsecurity/ssh-slow-bf │ ban    │         │    │ 11     │ 3h56m39s   │ 7        │
╰───────┴──────────┴───────────────────┴───────────────────────────┴────────┴─────────┴────┴────────┴────────────┴──────────╯
1 duplicated entries skipped####產生一條drop規則來拒絕爆破ip
root@test:/etc/crowdsec# iptables -nvL
Chain INPUT (policy ACCEPT 4474 packets, 465K bytes)pkts bytes target     prot opt in     out     source               destination         7223  741K CROWDSEC_CHAIN  all  --  *      *       0.0.0.0/0            0.0.0.0/0           Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination         Chain OUTPUT (policy ACCEPT 7530 packets, 1484K bytes)pkts bytes target     prot opt in     out     source               destination         Chain CROWDSEC_CHAIN (1 references)pkts bytes target     prot opt in     out     source               destination         29  2680 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            match-set crowdsec-blacklists-0 src /* CrowdSec: crowdsec */

8、排錯,唯一的難點就是系統產生的日志,無法被CrowdSec適配,可以將config.yaml的日志級別調為debug模式,對應/var/log/crowdsec.log的日志去分析

可以使用這條命令去分析日志是否能被正確匹配

crowdsec -type syslog -dsn file:///var/log/secure -label service:sshd -no-api --debug

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

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

相關文章

imx6ull-裸機學習實驗13——串口格式化函數移植實驗

目錄 前言 格式化函數 實驗程序編寫 stdio文件夾 main.c Makefile修改 編譯下載 前言 在學習實驗12:imx6ull串口通信實驗,我們實現了 UART1 基本的數據收發功能,雖然可以用來調試程序,但是功能太單一了,只能輸出…

CCF-GESP 等級考試 2025年6月認證C++三級真題解析

1 單選題(每題 2 分,共 30 分)第1題 8位二進制原碼能表示的最小整數是:( )A. -127 B. -128 C. -255 …

【網絡安全】服務間身份認證與授權模式

未經許可,不得轉載。 文章目錄 問題背景用戶到服務的身份認證與授權系統對系統的通信服務與服務之間的通信需求分析Basic Auth(基本身份認證)優點缺點mTLS 證書認證優點缺點OAuth 2.0優點缺點JWS(JSON Web Signature)優點缺點結合 Open Policy Agent 的 JWS 方案優點缺點結…

【EGSR2025】材質+擴散模型+神經網絡相關論文整理隨筆(四)

An evaluation of SVBRDF Prediction from Generative Image Models for Appearance Modeling of 3D Scenes輸入3D場景的幾何和一張參考圖像,通過擴散模型和SVBRDF預測器獲取多視角的材質maps,這些maps最終合并成場景的紋理地圖集,并支持在任…

Grid網格布局完整功能介紹和示例演示

CSS Grid布局是一種強大的二維布局系統,可以將頁面劃分為行和列,精確控制元素的位置和大小。以下是其完整功能介紹和示例演示: 基本概念 網格容器(Grid Container):應用display: grid的元素。網格項&#x…

學習C++、QT---21(QT中QFile庫的QFile讀取文件、寫入文件的講解)

每日一言把大目標拆成小步,每天前進一點點,終會抵達終點。QFile讀取文件我們記事本要進行讀取文件、寫入文件、等等的操作,那么這個時候我們的QT有一個QT類叫做QFile這個類的話是專門對于文件操作的,所以我們來學習我們在QT的幫助…

AD736ARZ-R7精密真有效值轉換器 高精度測量的首選方案

AD736ARZ-R7精密轉換器產品概述AD736ARZ-R7是ADI(Analog Devices Inc.)推出的一款低功耗、高精度的真有效值(RMS)轉直流(DC)轉換器,采用SOIC-8封裝,適用于需要精確測量交流或復雜波形…

【web應用】若依框架前端報表制作與導出全攻略(ECharts + html2canvas + jsPDF)

文章目錄前言一、ECharts準備工作1. 檢查ECharts安裝2. 導入ECharts3. 創建餅圖組件4. 模板部分二、報表導出功能實現1. 安裝依賴2. 導入依賴3. 完整導出函數實現4. 樣式優化三、完整組件實現四、常見問題與解決方案1. 圖表截圖不完整或模糊2. 圖表背景透明3. 導出PDF中文亂碼4…

vue3+express聯調接口時報“\“username\“ is required“問題

我用node .js的express框架寫的登錄接口,發現postman可以調通,但是vue3前端報錯vue3我發現是我后端node.js的app.js入口文件中配置的解析前端參數的解析中間件和前端請求頭中的Content-Type配置不一致的原因 解決方案 因為我后端配置解析表單數據的中間件…

《月亮與六便士》:天才的背叛與凡人救贖的殘酷辯證法

當滿地六便士成了庸人的火葬場??毛姆筆下的斯特里克蘭德,是一把捅穿中產幻夢的利刃。這個拋妻棄子、背叛友人的證券經紀人,在倫敦客廳的茶香與銀勺碰撞聲中,突然聽見了遠方的驚雷——“我必須畫畫”。如書中所言:??“在滿地都…

vue2往vue3升級需要注意的點(個人建議非必要別直接升級)

將 Vue 2 項目升級到 Vue 3 的過程中,需要重點關注以下幾個難點和關鍵點: 建議小項目直接用vue3重寫更快,bug更少 文章目錄1. **Composition API 的學習與應用**2. **全局 API 的變更**3. **模板語法的兼容性變化**4. **組件選項和生命周期的…

聚焦數據資源建設與應用,浙江省質科院赴景聯文科技調研交流

7月10日上午,浙江省質科院標準化中心副主任蔣建平、應珊婷等一行領導帶隊蒞臨景聯文科技調研指導工作。雙方圍繞工業數據展開深度交流。座談會上,景聯文科技詳細匯報了數據資源建設與應用方面的成果與規劃,介紹了公共數據授權運營與對外合作的…

【Linux】系統引導修復

目錄 開機引導過程 一.通電 二.BIOS環境檢測 三.磁盤引導階段 四.文件引導階段 自動引導配置文件丟失修復 內核參數文件丟失修復 內核鏡像文件丟失修復 內核初始化文件丟失修復 boot目錄誤刪丟失修復 開機引導過程 磁盤引導階段 /boot/grub2/grub.cfg #讀取自動引…

2023年全國青少年信息素養大賽C++編程初中組決賽真題+答案解析

2023年全國青少年信息素養大賽C++編程初中組決賽真題+答案解析 編程題 第一題 判斷是否存在重復的子序列 題目描述 從m 個字符中選取字符,生成n 個符號的序列,使得其中沒有2 個相鄰的子序列相同? 如從1,2,3,生成長度為5 的序列,序列“12321”是合格的,而“12323”和“12123”…

MySQL5.78.0鎖表確認及解除鎖表完全指南

目錄 一、MySQL鎖機制基礎 1.1 鎖的分類與作用 1.2 關鍵鎖類型詳解 二、鎖表的常見原因與風險 2.1 引發鎖表的典型場景 2.2 鎖表的業務影響 三、鎖表狀態確認方法 3.1 基礎工具:SHOW PROCESSLIST 3.2 MySQL 8.0鎖信息查詢(推薦) 3.2…

springboot生成pdf方案之dot/html/圖片轉pdf三種方式

文章目錄pdf生成方案dot轉pdfhtml轉pdfopenhtmltopdfaspose-pdf實踐playwright實踐圖片轉pdfApache PDFBox實踐框架場景匹配后記前言:隨著客戶對報告審美的提升,需求也越來越五彩斑斕~ 原有的dot模板已經滿足不了他們了!這篇文章主打列出各種…

前端開發—全棧開發

全棧開發者在面試前端或全棧崗位時,自我介紹需要巧妙融合“技術廣度”與“崗位針對性”,避免成為泛泛而談的“樣樣通樣樣松”。以下是結合面試官關注點和全棧特性的專業介紹策略:🧠 一、自我介紹的核心理念 突出全棧優勢&#xff…

Redis生產環境過期策略配置指南:務實落地,避免踩坑

在生產環境中合理配置Redis過期策略是保障系統穩定性和內存效率的關鍵。以下配置建議基于實戰經驗,避免理論堆砌,直擊核心要點:一、核心策略配置:惰性刪除 定期刪除(默認已啟用)無需額外配置:R…

Ubuntu 20.04 安裝 Node.js 20.x、npm、cnpm 和 pnpm 完整指南

🌐 Ubuntu 20.04 安裝 Node.js 20.x、npm、cnpm 和 pnpm 完整指南 🚀 在本文中,我們將介紹如何在 Ubuntu 20.04 上安裝 Node.js 20.x,以及如何安裝 npm、cnpm 和 pnpm 來提高開發效率 ?。1?? 安裝 Node.js 20.x 為了確保使用最…

【時時三省】(C語言基礎)通過指針引用數組元素

山不在高,有仙則名。水不在深,有龍則靈。 ----CSDN 時時三省引用一個數組元素,可以用下面兩種方法:( 1 )下標法,如a[i]形式;( 2 )指針法,如* ( a i )或* ( p i )。其中a是數組名,p…