目錄
什麼是重做攻擊?
重做如何影響您的應用程序
防止重做的策略
1。避免模棱兩可或嵌套的量詞
2。盡可能使用非捕獲和原子組
3。應用輸入長度限制
4。在關鍵路徑上安全使用正則
5。利用工具來檢測脆弱模式
現實世界示例:電子郵件驗證錯誤
最後的想法
首頁 後端開發 php教程 確保您的申請:防止有效的正則攻擊重做攻擊

確保您的申請:防止有效的正則攻擊重做攻擊

Aug 13, 2025 pm 03:17 PM
PHP Regular Expressions

REDOS攻擊利用效率低下的正則方式通過過度使用CPU導致服務拒絕。 1。通過簡化為a來避免(a)之類的嵌套量詞。 2。使用原子組(?> ...)防止回溯。 3。限制輸入長度在正則評估之前。 4。避免在臨界路徑中的複雜言論;預編譯和設定超時。 5。使用諸如Regex靜態分析或Eslint-Plugin-Security之類的工具來及早檢測脆弱性。始終更喜歡簡單的模式,驗證具有專用庫的電子郵件,並將其視為潛在的攻擊向量,以構建安全,彈性的應用程序。

確保您的申請:防止有效的正則攻擊重做攻擊

正則表達式是應用程序中的模式匹配和輸入驗證的強大工具,但是如果不仔細使用,它們可能會成為安全責任。經常被忽視的漏洞是正則表達拒絕服務(重做) - 一種拒絕的服務攻擊,它利用低效率的正則表達方式消耗了過多的CPU資源,從而導致應用程序減慢或變得無反應。

確保您的申請:防止有效的正則攻擊重做攻擊

什麼是重做攻擊?

當正則發動機花費大量時間來評估設計不良的正則表達式的惡性輸入時,會發生重做。這是由於指數級的回溯圖案,這些圖案包含嵌套量詞或模棱兩可的替代方案(例如, .*.* 。*, (a )(\d )* )。

例如,請考慮此正則:

確保您的申請:防止有效的正則攻擊重做攻擊
 ^(a)$

這似乎是無害的,但是當對"aaaaX"之類的字符串進行測試時,該發動機會嘗試無數組合,以了解a組如何匹配輸入之前的輸入不匹配。使用較長的輸入,這可能需要幾秒鐘甚至幾分鐘的時間,這是高流量應用中的一個嚴重問題。

重做如何影響您的應用程序

當攻擊者發送旨在觸發最壞情況的正則表達性能的輸入時:

確保您的申請:防止有效的正則攻擊重做攻擊
  • 使用此類正面的API端點可以懸掛。
  • 服務器響應時間急劇增加。
  • CPU使用峰值,可能會影響其他服務。
  • 在極端情況下,整個服務變得不可用。

這使得重做是一個真正的威脅,尤其是在身份驗證,路由或輸入衛生邏輯中,在這種情況下是常見的。

防止重做的策略

1。避免模棱兩可或嵌套的量詞

諸如(.*.*)(ab )*(.\*)*之類的模式是危險信號。它們創造了巨大的回溯潛力。而是簡化或重寫它們。

更安全的替代方案:如果您需要匹配一個或多個a ,則需要使用某些東西,請使用原子組或所有格量詞(如果受支持),或重組邏輯。

例如,替換:

 ^(a)$

和:

 ^a $

2。盡可能使用非捕獲和原子組

分組而無需捕獲會減少開銷。原子組(例如, (?>...) )防止匹配的群組,限制了最壞情況。

例子:

 ^(?>(a))$

由於發動機不會重試內部組合,因此在非匹配輸入上失敗了。

3。應用輸入長度限制

在非常長的輸入中,即使是安全的言論也可能是危險的。在等級評估之前,始終施加合理的輸入長度限制。

例如:

 if(input.length> 1000){
  提出新的錯誤(“輸入太長”);
}
//然後應用正則

這樣可以防止攻擊者發送旨在利用邊緣案件的千數鍵有效載荷。

4。在關鍵路徑上安全使用正則

避免在高頻代碼路徑(例如身份驗證或路由)中進行複雜的再發格。如果您必須使用它們:

  • 預編譯時正則方式模式。
  • 使用最差的輸入測試性能。
  • 設置超時,如果您的環境支持它(例如,某些正則庫允許執行限制)。

5。利用工具來檢測脆弱模式

使用靜態分析工具在開發過程中捕獲危險的言論:

  • REGEX靜態分析- 檢測重做漏洞。
  • Eslint插件(例如eslint-plugin-security Flag Risky Regex)。
  • Regex101 (謹慎)等在線掃描儀可以幫助可視化回溯。

現實世界示例:電子郵件驗證錯誤

一個常見的錯誤是使用過於復雜的式以進行電子郵件驗證:

 ^[a-za-z0-9 ._% - ] @[a-za-z0-9.-] \。 [a-za-z] {2,} $

雖然這看起來不錯,但添加嵌套的量詞(例如, (. ) @ )或允許過多的靈活性可以打開重做的大門。

✅更好的方法:

  • 對基本格式檢查使用簡單的模式匹配。
  • 依靠專用的電子郵件驗證庫。
  • 或通過確認電子郵件而不是複雜的正則驗證。

最後的想法

誤解時是方便但危險的。重做攻擊利用在代碼審查期間很難發現的微妙效率低下。關鍵是:

  • 寫簡單,精確的模式。
  • 避免歧義和回溯。
  • 限制輸入大小。
  • 使用工具儘早檢測漏洞。

通過將Regexes視為潛在的攻擊向量(不僅僅是實用程序功能),您可以構建更具彈性和安全的應用程序。

基本上,如果您的正則表達式看起來太聰明,那可能太冒險了。保持簡單,對其進行艱苦測試,並且永遠不要相信用戶輸入。

以上是確保您的申請:防止有效的正則攻擊重做攻擊的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Stock Market GPT

Stock Market GPT

人工智慧支援投資研究,做出更明智的決策

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

`u`修飾符釋放:深入介紹PHP中的Unicode-ware Regex `u`修飾符釋放:深入介紹PHP中的Unicode-ware Regex Aug 03, 2025 am 06:39 AM

TheumodifierinPHPregexisessentialforproperUTF-8andUnicodesupport.1.ItensuresthepatternandinputstringaretreatedasUTF-8,preventingmisinterpretationofmulti-bytecharacters.2.Withoutu,characterslikeéoremojismaycausemismatchesorfailuresbecausetheengineread

超越數字捕獲:在' preg_match”和`preg_replace'利用命名組” 超越數字捕獲:在' preg_match”和`preg_replace'利用命名組” Aug 04, 2025 pm 03:44 PM

名為CaptureGroupsInphppRovideAclearandMainabainableWaytoTallableDtextedTextByAssigningMeaningMeaningFufulNamesInsteadoFrelyingOnnumericIndices.1.use(?staters)或('name'Patter)或('name'Pattern)

使用PHP的`preg_match_all`製作強大的日誌文件解析器 使用PHP的`preg_match_all`製作強大的日誌文件解析器 Aug 03, 2025 am 09:20 AM

使用preg_match_all函數配合正則表達式可高效解析PHP日誌文件,1.首先分析日誌格式如Apache的CLF;2.構建含命名捕獲組的正則模式提取IP、方法、路徑等字段;3.使用preg_match_all配合PREG_SET_ORDER標誌批量解析多行日誌;4.處理邊緣情況如缺失字段或跨行日誌;5.對提取數據進行驗證與類型轉換,最終將非結構化日誌轉化為結構化數組數據以供進一步處理。

掌握複雜字符串斷言的lookaheads和lookbehinds 掌握複雜字符串斷言的lookaheads和lookbehinds Aug 04, 2025 am 06:35 AM

正向先行斷言(?=...)、負向先行斷言(?!...)、正向後行斷言(?

馴服野獸:在PCRE中減輕災難性的回溯 馴服野獸:在PCRE中減輕災難性的回溯 Aug 03, 2025 am 07:17 AM

災難性背帶TrackingoccurswhennestedgreedyquantifierscauseexponentialbacktrackingonfailedMatches,asin^(a)$針對“ aaaax” .2.useatomicGroups(useatomicGroups(?>(?>(...))orpossessessiveQuantifiers(e.g.,e)topreventections topreventections.3

PCRE中的遞歸模式用於解析嵌套結構 PCRE中的遞歸模式用於解析嵌套結構 Aug 11, 2025 am 11:06 AM

pcre'sRecursivePatternsenableMatchingNestedStructuresLikeParenthensOrbracketSsing(?r)OrnamedReferencesLike(?&name),允許theeringThereThereThereGexEnginetoHandohandlebalcuctsbortsssbysbyrecurssbyrecursesbyreprecursivelyveliveraly ApplyingThepternively ApplyTheptertn;

確保您的申請:防止有效的正則攻擊重做攻擊 確保您的申請:防止有效的正則攻擊重做攻擊 Aug 13, 2025 pm 03:17 PM

redoSattackSexploItineFefitedRegexpatternStocauseDenialofServiceViaExcessiveCpuuse.1.AvoidNestEdquantifiersLike(a)bySimplifyingtoa .2.useatomicGroups(useatomicGroups(> useatoMicGroup)(?> ...> ...)

執行無誤的匹配:PHP中原子分組的功能 執行無誤的匹配:PHP中原子分組的功能 Aug 03, 2025 pm 02:17 PM

AtomicgroupsinPHPpreventbacktrackingwithinamatchedsubpattern,ensuringfasterandmorepredictableregexperformance.1.Theystoptheenginefromre-evaluatingpartsofapatternoncematched,avoidingcatastrophicbacktrackingincaseslikemissingdelimiters.2.Theyenforce&qu

See all articles