Python ValueError:不安全的标头值
我使用Tornado4.2开发了一个相当大的web应用程序。我的应用程序的一个处理程序负责通过post请求验证用户的登录详细信息 具体地说,在这个处理程序中,我使用已签名的Cookie来识别已登录的用户及其权限,使用以下代码:Python ValueError:不安全的标头值,python,post,http-headers,tornado,Python,Post,Http Headers,Tornado,我使用Tornado4.2开发了一个相当大的web应用程序。我的应用程序的一个处理程序负责通过post请求验证用户的登录详细信息 具体地说,在这个处理程序中,我使用已签名的Cookie来识别已登录的用户及其权限,使用以下代码: self.set_cookie("user", self.get_argument("username"), domain=".my-domain.com", expires_days=None, httpOnly=True) self.set_secure_cooki
self.set_cookie("user", self.get_argument("username"), domain=".my-domain.com", expires_days=None, httpOnly=True)
self.set_secure_cookie("access", str(data['permissions']), expires_days=None, httpOnly=True)
设置cookies后,我使用Tornado将用户发送到另一个URL
self.redirect("/"+lang+"/base_fx.html")
在大多数情况下,它可以正常工作,没有任何问题。然而,对于一些用户,我得到以下错误
self.redirect("/"+lang+"/base_fx.html")
File "/usr/lib/python2.7/dist-packages/tornado/web.py", line 671, in redirect
self.finish()
File "/usr/lib/python2.7/dist-packages/tornado/web.py", line 934, in finish
self.flush(include_footers=True)
File "/usr/lib/python2.7/dist-packages/tornado/web.py", line 884, in flush
self.add_header("Set-Cookie", cookie.OutputString(None))
File "/usr/lib/python2.7/dist-packages/tornado/web.py", line 339, in add_header
self._headers.add(name, self._convert_header_value(value))
File "/usr/lib/python2.7/dist-packages/tornado/web.py", line 369, in
_convert_header_value
raise ValueError("Unsafe header value %r", value)
ValueError: ('Unsafe header value %r', 'access="2|1:0|10:1485161516|6:access|3892:eydvd…<long string>..f0a2f8ad"; httponly; Path=/')
ERROR:tornado.general:Cannot send error response after headers written
self.redirect(“/”+lang+“/base\u fx.html”)
文件“/usr/lib/python2.7/dist packages/tornado/web.py”,第671行,在重定向中
self.finish()
文件“/usr/lib/python2.7/dist-packages/tornado/web.py”,第934行,完成
self.flush(include_footers=True)
文件“/usr/lib/python2.7/dist-packages/tornado/web.py”,第884行,齐平
self.add_头(“Set Cookie”,Cookie.OutputString(None))
文件“/usr/lib/python2.7/dist packages/tornado/web.py”,第339行,在add_标题中
self.\u headers.add(名称、self.\u转换\u header\u值(值))
文件“/usr/lib/python2.7/dist-packages/tornado/web.py”,第369行,在
_转换\u头\u值
raise VALUERROR(“不安全的标题值%r”,值)
ValueError:('Unsafe header value%r','access=“2 | 1:0 | 10:1485161516 | 6:access | 3892:eydvd…”f0a2f8ad“httponly;Path=/”)
错误:tornado。常规:写入标题后无法发送错误响应
有没有人遇到过类似的问题?查看以下两个选项:
set\u secure\u cookie
方法正确地将其给定值转义为base64。请确保您的用户名不包含([\x00-\x1f]
)或-更好-对用户名使用安全cookieGeorg Jung post为我指出了正确的方向。我所面临的ValueError:Unsafe header value问题与两个现有的问题有关:这两个问题现在已经在Tornado版本上得到了解决。对我来说,问题是一些用户名比其他用户名长,导致这些用户名的标题大小大于4000 因此,要正确解决此问题,您可以采取以下两种措施之一:
usr/lib/python3.2/dist-packages/tornado/web.py
谢谢@Georg!所以问题是我没有检查安装版本的源代码,而是最新版本的源代码。感谢您为我指明了正确的方向,我已经投票并发布了解决方案:)