MCPcopy Index your code
hub / github.com/sqlmapproject/sqlmap / findPageForms

Function findPageForms

lib/core/common.py:4661–4789  ·  view source on GitHub ↗

Parses given page content for possible forms (Note: still not implemented for Python3) >>> findPageForms(' ', 'http://www.site.com') == set([('http://www.si

(content, url, raiseException=False, addToTargets=False)

Source from the content-addressed store, hash-verified

4659 return retVal
4660
4661def findPageForms(content, url, raiseException=False, addToTargets=False):
4662 """
4663 Parses given page content for possible forms (Note: still not implemented for Python3)
4664
4665 >>> findPageForms('<html><form action="/input.php" method="POST"><input type="text" name="id" value="1"><input type="submit" value="Submit"></form></html>', 'http://www.site.com') == set([('http://www.site.com/input.php', 'POST', 'id=1', None, None)])
4666 True
4667 """
4668
4669 class _(six.StringIO, object):
4670 def __init__(self, content, url):
4671 super(_, self).__init__(content)
4672 self._url = url
4673
4674 def geturl(self):
4675 return self._url
4676
4677 if not content:
4678 errMsg = "can't parse forms as the page content appears to be blank"
4679 if raiseException:
4680 raise SqlmapGenericException(errMsg)
4681 else:
4682 logger.debug(errMsg)
4683
4684 forms = None
4685 retVal = set()
4686 response = _(content, url)
4687
4688 try:
4689 forms = ParseResponse(response, backwards_compat=False)
4690 except ParseError:
4691 if re.search(r"(?i)<!DOCTYPE html|<html", content or "") and not re.search(r"(?i)\.js(\?|\Z)", url):
4692 dbgMsg = "badly formed HTML at the given URL ('%s'). Going to filter it" % url
4693 logger.debug(dbgMsg)
4694 filtered = _("".join(re.findall(FORM_SEARCH_REGEX, content)), url)
4695
4696 if filtered and filtered != content:
4697 try:
4698 forms = ParseResponse(filtered, backwards_compat=False)
4699 except:
4700 errMsg = "no success"
4701 if raiseException:
4702 raise SqlmapGenericException(errMsg)
4703 else:
4704 logger.debug(errMsg)
4705 except:
4706 pass
4707
4708 for form in forms or []:
4709 try:
4710 for control in form.controls:
4711 if hasattr(control, "items") and not any((control.disabled, control.readonly)):
4712 # if control has selectable items select first non-disabled
4713 for item in control.items:
4714 if not item.disabled:
4715 if not item.selected:
4716 item.selected = True
4717 break
4718

Callers 2

crawlThreadFunction · 0.90
_findPageFormsFunction · 0.90

Calls 14

ParseResponseFunction · 0.90
htmlUnescapeFunction · 0.90
urldecodeFunction · 0.85
unArrayizeValueFunction · 0.85
checkSameHostFunction · 0.85
debugMethod · 0.80
clickMethod · 0.80
get_methodMethod · 0.80
_Function · 0.70
getSafeExStringFunction · 0.70
searchMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…