தொகுதி பாடங்கள் (4/4)
பின்னோட்டம்: ஒரு கண்ணோட்டம்
ஒரு பேராசை கொண்ட அளவுகோல் "ஓவர்ஷூட்" ஆகும்போது, இயந்திரம் பின்னடிப்பு செய்கிறது: அது பின்வாங்குகிறது, மற்றொரு உள்ளமைவை முயற்சிக்கிறது, மீண்டும் முயற்சிக்கிறது. எளிய வடிவங்களில் அது கண்ணுக்கு தெரியாதது; மோசமாக எழுதப்பட்ட வடிவங்களில் அது அதிவேகமாக ஆகலாம் உலாவியை நொடிகளுக்கு முடக்கவும். இது ReDoS இன் ரூட் (வழக்கமானது வெளிப்பாடு சேவை மறுப்பு).
Pattern: .*\d
Sample: abc123def
Steps:
1. .* consumes everything: "abc123def"
2. \d fails (end of string).
3. Backtrack: .* drops 'f' -> "abc123de", \d fails on 'f'.
4. Backtrack: .* drops 'ef' -> "abc123d", \d fails on 'e'.
5. ... and so on until \d finds a digit: match = "abc123" + "?"... actually
the pattern matches "abc123" because .* leaves "def" and \d looks at '3'? No: the
backtrack continues and .* ends up being "abc12", \d=3. Final match: "abc123".எஞ்சின் எப்போதும் அங்கு வரும், ஆனால் பேராசை கொண்ட அளவுகோல் இருந்தால்
மற்றொரு பேராசை அளவுகோல் (எ.கா. (a+)+), உள்ளமைவுகளின் எண்ணிக்கை
முயற்சி வெடிக்க முடியும்.
பேரழிவு வடிவங்கள்
Pattern: (a+)+b
Sample: aaaaaaaaaaaaaaaaaaaaaபின்தொடரவில்லை b → முறை தோல்வியடைந்தது, ஆனால் அங்கு செல்ல எஞ்சின் ஒவ்வொரு முறையும் முயற்சிக்கிறது
as இன் சாத்தியமான பகிர்வு. அதிவேக வளர்ச்சி: 30 as உடன் உங்களால் முடியும்
மணிக்கணக்கில் காத்திருக்கவும்.
பின்னடைவு மற்றும் ReDoS இன் அபாயங்கள்
ஒரு முறை ஒன்றுடன் ஒன்று அல்லது உள்ளமைக்கப்பட்ட அளவுகோல்களைக் கொண்டிருக்கும்போது (எ.கா. (a+)+), தோல்வியடைவதற்கு முன், எஞ்சின் அதிவேக எண்ணிக்கையிலான பாதைகளை மதிப்பிடுகிறது. எழுத்து வகுப்புகளைத் தவிர்த்து பொதுவான வைல்டு கார்டுகளை மாற்றுவது பின்தங்கிய பாதைகளை வெகுவாகக் குறைக்கிறது.
முயற்சி செய்து பாருங்கள்
உரையில் உள்ள ஒவ்வொரு நிகழ்வுக்கும் சதுர அடைப்புக்குறிக்குள் உள்ளடக்கத்தை பிரித்தெடுக்கவும். பிந்தைய மூடல்களுக்குத் தாவுவதைத் தவிர்க்க, அளவீட்டின் சோம்பேறி பதிப்பைப் பயன்படுத்தவும்.
குறிப்பைக் காட்டு
\\[.*?\\] முதல் மூடலில் நிறுத்தப்படும் ]: அதிக பின்னடைவு இல்லை.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
மதிப்பாய்வு பயிற்சி
உரையில் உள்ள ஒவ்வொரு `http://...` அல்லது `https://...` URL ஐயும், விருப்பமான `s`க்கான `?` அளவையும், பாதையின் இடம் இல்லாத எழுத்துகளுக்கு `\\S+` ஐப் பயன்படுத்தியும் கண்டறியவும்.
குறிப்பைக் காட்டு
https? அதாவது 'http' என்பதைத் தொடர்ந்து விருப்பமான 's'. பின்னர் //, பின்னர் \\S+ (இடங்கள் அல்லாதவை).
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
கூடுதல் சவால்
Match strings enclosed in double quotes, avoiding excessive backtracking by using the negated class `[^"]*` instead of `.*`.
குறிப்பைக் காட்டு
Replace the dot with the negated class [^"] to restrict the engine's backtracking paths.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்