Opened 14 years ago
Closed 14 years ago
#15851 closed Bug (duplicate)
Exception when http.parse_cookie recieves bad cookie
Reported by: | Fredrik Stålnacke | Owned by: | nobody |
---|---|---|---|
Component: | HTTP handling | Version: | 1.3 |
Severity: | Normal | Keywords: | parse_cookie |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Hi!
I'm currently having a problem where the user in some circumstances get a strange cookie (from a sub-domain that I don't control). When this cookie is parsed by django http.parse_cookie an exception occurs that causes the user to get a error message back.
I've managed to reproduce the error with the following code:
from django import cookie evil_cookie="""test=<#?xml version="1.0" encoding="utf-16"?#><#CookieData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"#><#/CookieData#>|<#?xml version="1.0" encoding="utf-16"?#><#CookieData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"#><#/CookieData#>""" http.parse_cookie(evil_cookie)
The error message that are created are:
python2.6/site-packages/django/http/__init__.pyc in parse_cookie(cookie) 461 try: 462 c = SimpleCookie() --> 463 c.load(cookie, ignore_parse_errors=True) 464 except Cookie.CookieError: 465 # Invalid cookie python2.6/site-packages/django/http/__init__.pyc in load(self, rawdata, ignore_parse_errors) 95 self.bad_cookies = [] 96 self._BaseCookie__set = self._loose_set ---> 97 super(SimpleCookie, self).load(rawdata) 98 if ignore_parse_errors: 99 self._BaseCookie__set = self._strict_set /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/Cookie.pyc in load(self, rawdata) 623 """ 624 if type(rawdata) == type(""): --> 625 self.__ParseString(rawdata) 626 else: 627 self.update(rawdata) /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/Cookie.pyc in __ParseString(self, str, patt) 654 else: 655 rval, cval = self.value_decode(V) --> 656 self.__set(K, rval, cval) 657 M = self[K] 658 # end __ParseString python2.6/site-packages/django/http/__init__.pyc in _loose_set(self, key, real_value, coded_value) 105 def _loose_set(self, key, real_value, coded_value): 106 try: --> 107 self._strict_set(key, real_value, coded_value) 108 except Cookie.CookieError: 109 self.bad_cookies.append(key) /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/Cookie.pyc in __set(self, key, real_value, coded_value) 576 """Private method for setting a cookie's value""" 577 M = self.get(key, Morsel()) --> 578 M.set(key, real_value, coded_value) 579 dict.__setitem__(self, key, M) 580 # end __set AttributeError: 'NoneType' object has no attribute 'set'
I am using Django 1.3 on Mac OS X with Python 2.6.1
Note:
See TracTickets
for help on using tickets.
See #15852