Opened 15 years ago
Closed 15 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