NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

canonical.py (1238B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\url_utils\client\canonical.py
      2 import urlparse
      3 ALLOWED_SCHEMES = ('http', 'https')
      4 FORBIDDEN_CHARS = frozenset(u'\\<>"')
      5 
      6 def canonicalize_http_url(url):
      7     if not isinstance(url, basestring):
      8         return None
      9     if isinstance(url, bytes):
     10         url = url.decode('latin-1')
     11     u = url.strip()
     12     for c in u:
     13         if not 32 < ord(c) < 127 or c in FORBIDDEN_CHARS:
     14             return None
     15 
     16     try:
     17         parsed = urlparse.urlparse(u)
     18         scheme = parsed.scheme.lower()
     19         if scheme not in ALLOWED_SCHEMES or not parsed.netloc:
     20             return None
     21         canonical = urlparse.urlunparse((scheme,
     22          parsed.netloc,
     23          parsed.path,
     24          parsed.params,
     25          parsed.query,
     26          parsed.fragment))
     27     except Exception:
     28         return None
     29 
     30     if not canonical.startswith(scheme + u'://'):
     31         return None
     32     return canonical
     33 
     34 
     35 def canonical_safe_url(url):
     36     canonical = canonicalize_http_url(url)
     37     if canonical is None:
     38         return
     39     if canonical.find(u'../') >= 0 or canonical.find(u'\\..') >= 0:
     40         return
     41     if canonical.lower().endswith(u'.exe'):
     42         return
     43     return canonical