Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2e92d86

Browse files
committed
improvement of reflective mechanism
1 parent 60ca44e commit 2e92d86

1 file changed

Lines changed: 27 additions & 24 deletions

File tree

lib/core/common.py

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2645,36 +2645,39 @@ def _(value):
26452645
payload = getUnicode(urldecode(payload.replace(PAYLOAD_DELIMITER, '')))
26462646
regex = _(filterStringValue(payload, r'[A-Za-z0-9]', REFLECTED_REPLACEMENT_REGEX.encode("string-escape")))
26472647

2648-
if all(part.lower() in content.lower() for part in regex.split(REFLECTED_REPLACEMENT_REGEX)): # fast optimization check
2649-
parts = regex.split(REFLECTED_REPLACEMENT_REGEX)
2650-
if len(parts) > REFLECTED_MAX_REGEX_PARTS: # preventing CPU hogs
2651-
regex = _("%s%s%s" % (REFLECTED_REPLACEMENT_REGEX.join(parts[:REFLECTED_MAX_REGEX_PARTS / 2]), REFLECTED_REPLACEMENT_REGEX, REFLECTED_REPLACEMENT_REGEX.join(parts[-REFLECTED_MAX_REGEX_PARTS / 2:])))
2648+
if regex != payload:
2649+
regex = re.sub(r"\A([A-Za-z0-9]+)", r"(\1)?", regex)
26522650

2653-
if regex.lstrip(REFLECTED_REPLACEMENT_REGEX) != regex:
2654-
regex = r"%s%s" % (REFLECTED_BORDER_REGEX, regex.lstrip(REFLECTED_REPLACEMENT_REGEX))
2655-
else:
2656-
regex = r"\b%s" % regex
2651+
if all(part.lower() in content.lower() or part.endswith(')?') for part in regex.split(REFLECTED_REPLACEMENT_REGEX)): # fast optimization check
2652+
parts = regex.split(REFLECTED_REPLACEMENT_REGEX)
2653+
if len(parts) > REFLECTED_MAX_REGEX_PARTS: # preventing CPU hogs
2654+
regex = _("%s%s%s" % (REFLECTED_REPLACEMENT_REGEX.join(parts[:REFLECTED_MAX_REGEX_PARTS / 2]), REFLECTED_REPLACEMENT_REGEX, REFLECTED_REPLACEMENT_REGEX.join(parts[-REFLECTED_MAX_REGEX_PARTS / 2:])))
26572655

2658-
if regex.rstrip(REFLECTED_REPLACEMENT_REGEX) != regex:
2659-
regex = r"%s%s" % (regex.rstrip(REFLECTED_REPLACEMENT_REGEX), REFLECTED_BORDER_REGEX)
2660-
else:
2661-
regex = r"%s\b" % regex
2656+
if regex.startswith(REFLECTED_REPLACEMENT_REGEX):
2657+
regex = r"%s%s" % (REFLECTED_BORDER_REGEX, regex.lstrip(REFLECTED_REPLACEMENT_REGEX))
2658+
else:
2659+
regex = r"\b%s" % regex
26622660

2663-
retVal = re.sub(r"(?i)%s" % regex, REFLECTED_VALUE_MARKER, content)
2661+
if regex.endswith(REFLECTED_REPLACEMENT_REGEX):
2662+
regex = r"%s%s" % (regex.rstrip(REFLECTED_REPLACEMENT_REGEX), REFLECTED_BORDER_REGEX)
2663+
else:
2664+
regex = r"%s\b" % regex
26642665

2665-
if retVal != content:
2666-
kb.reflectiveCounters[REFLECTIVE_COUNTER.HIT] += 1
2667-
if not suppressWarning:
2668-
warnMsg = "reflective value(s) found and filtering out"
2669-
singleTimeWarnMessage(warnMsg)
2666+
retVal = re.sub(r"(?i)%s" % regex, REFLECTED_VALUE_MARKER, content)
26702667

2671-
elif not kb.testMode and not kb.reflectiveCounters[REFLECTIVE_COUNTER.HIT]:
2672-
kb.reflectiveCounters[REFLECTIVE_COUNTER.MISS] += 1
2673-
if kb.reflectiveCounters[REFLECTIVE_COUNTER.MISS] > REFLECTIVE_MISS_THRESHOLD:
2674-
kb.reflectiveMechanism = False
2668+
if retVal != content:
2669+
kb.reflectiveCounters[REFLECTIVE_COUNTER.HIT] += 1
26752670
if not suppressWarning:
2676-
debugMsg = "turning off reflection removal mechanism (for optimization purposes)"
2677-
logger.debug(debugMsg)
2671+
warnMsg = "reflective value(s) found and filtering out"
2672+
singleTimeWarnMessage(warnMsg)
2673+
2674+
elif not kb.testMode and not kb.reflectiveCounters[REFLECTIVE_COUNTER.HIT]:
2675+
kb.reflectiveCounters[REFLECTIVE_COUNTER.MISS] += 1
2676+
if kb.reflectiveCounters[REFLECTIVE_COUNTER.MISS] > REFLECTIVE_MISS_THRESHOLD:
2677+
kb.reflectiveMechanism = False
2678+
if not suppressWarning:
2679+
debugMsg = "turning off reflection removal mechanism (for optimization purposes)"
2680+
logger.debug(debugMsg)
26782681

26792682
return retVal
26802683

0 commit comments

Comments
 (0)