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

Skip to content

Commit ccbd93c

Browse files
committed
fix for redirect/HOST header bug
1 parent 1061c06 commit ccbd93c

4 files changed

Lines changed: 32 additions & 8 deletions

File tree

doc/THANKS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,9 @@ Phil P <@superevr>
648648
649649
for reporting a minor bug
650650

651+
652+
for reporting a bug
653+
651654
shiftzwei <[email protected]>
652655
for reporting a couple of bugs
653656

lib/core/common.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3127,4 +3127,12 @@ def geturl(self):
31273127
for target in retVal:
31283128
kb.targetUrls.add(target)
31293129

3130+
return retVal
3131+
3132+
def getHostHeader(url):
3133+
retVal = urlparse.urlparse(url).netloc
3134+
3135+
if any(map(lambda x: retVal.endswith(':%d' % x), [80, 443])):
3136+
retVal = retVal.split(':')[0]
3137+
31303138
return retVal

lib/request/connect.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from lib.core.common import extractRegexResult
2626
from lib.core.common import getCurrentThreadData
2727
from lib.core.common import getFilteredPageContent
28+
from lib.core.common import getHostHeader
2829
from lib.core.common import getUnicode
2930
from lib.core.common import logHTTPTraffic
3031
from lib.core.common import parseTargetUrl
@@ -234,10 +235,7 @@ def getPage(**kwargs):
234235

235236
headers[HTTPHEADER.ACCEPT] = HTTP_ACCEPT_HEADER_VALUE
236237

237-
headers[HTTPHEADER.HOST] = urlparse.urlparse(url).netloc
238-
239-
if any(map(lambda x: headers[HTTPHEADER.HOST].endswith(':%d' % x), [80, 443])):
240-
headers[HTTPHEADER.HOST] = headers[HTTPHEADER.HOST].split(':')[0]
238+
headers[HTTPHEADER.HOST] = getHostHeader(url)
241239

242240
if auxHeaders:
243241
for key, item in auxHeaders.items():

lib/request/redirecthandler.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
from lib.core.data import conf
1414
from lib.core.data import logger
15+
from lib.core.common import getHostHeader
1516
from lib.core.common import getUnicode
1617
from lib.core.common import logHTTPTraffic
1718
from lib.core.enums import HTTPHEADER
@@ -28,6 +29,16 @@ class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
2829
# assuming we're in a loop
2930
max_redirections = 10
3031

32+
def _get_header_redirect(self, headers):
33+
retVal = None
34+
35+
if "location" in headers:
36+
retVal = headers.getheaders("location")[0].split("?")[0]
37+
elif "uri" in headers:
38+
retVal = headers.getheaders("uri")[0].split("?")[0]
39+
40+
return retVal
41+
3142
def common_http_redirect(self, result, headers, code, content, msg):
3243
content = decodePage(content, headers.get(HTTPHEADER.CONTENT_ENCODING), headers.get(HTTPHEADER.CONTENT_TYPE))
3344

@@ -49,10 +60,8 @@ def common_http_redirect(self, result, headers, code, content, msg):
4960
logger.log(7, responseMsg)
5061

5162
if result:
52-
if "location" in headers:
53-
result.redurl = headers.getheaders("location")[0].split("?")[0]
54-
elif "uri" in headers:
55-
result.redurl = headers.getheaders("uri")[0].split("?")[0]
63+
if self._get_header_redirect(headers):
64+
result.redurl = self._get_header_redirect(headers)
5665

5766
if hasattr(result, 'redurl'):
5867
if not urlparse.urlsplit(result.redurl).netloc:
@@ -76,6 +85,9 @@ def http_error_301(self, req, fp, code, msg, headers):
7685
dbgMsg += "redirect response content (%s)" % msg
7786
logger.debug(dbgMsg)
7887

88+
if self._get_header_redirect(headers):
89+
req.headers[HTTPHEADER.HOST] = getHostHeader(self._get_header_redirect(headers))
90+
7991
result = urllib2.HTTPRedirectHandler.http_error_301(self, req, fp, code, msg, headers)
8092
return self.common_http_redirect(result, headers, code, content, msg)
8193

@@ -90,6 +102,9 @@ def http_error_302(self, req, fp, code, msg, headers):
90102
dbgMsg += "redirect response content (%s)" % msg
91103
logger.debug(dbgMsg)
92104

105+
if self._get_header_redirect(headers):
106+
req.headers[HTTPHEADER.HOST] = getHostHeader(self._get_header_redirect(headers))
107+
93108
result = urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers)
94109
return self.common_http_redirect(result, headers, code, content, msg)
95110

0 commit comments

Comments
 (0)