意外的遇到文件尾,发现微软一个bug,httpwebrequest处理cookie遇到意外字符会丢失的问题

无意中发现微软一个bug,httpwebrequest丢失cookie的问题,确切来说应该属于header参数解析的问题。

刚开始以为是cookiecontainer的问题,后来调试的时候发现并不是。具体如下:

当webserver返回如下信息的时候,会出现问题
Set-cookie
Set-Cookie: autologin=EXPIRED; Domain=.mail.qq.com; Path=/; Expires=Thu, 16-Jun-2011 16:35:24 GMT
Set-Cookie: qm_flag=0; Domain=.crazycoder.cn; Path=/
Set-Cookie: uid=crazycoder&6237752bc0ea336d77b26b203a702000,crazycoder.cn..; Domain=.crazycoder.cn; Path=/
Set-Cookie: security=6237752bc0ea336d77b26b203a702000,crazycoder.cn..; Domain=.crazycoder.cn; Path=/

注意红色标注的部分,当cookie的value中出现逗号的时候,在获取response.headers的时候会丢失 uid的cookie,同时将 .crazycoder.cn 作为一个独立的cookie的key标识出来,value为null
在cookiecontainer上花了太多时间,重写了一下依然无效。
后来考虑了一下,调试response.headers["set-cookie"].values 发现,此处获取的数据已经将uid丢失并解释失败,应该是values默认以逗号分隔,而cookie中含有逗号的话则会出现split的问题

解决方法:
思路很简单,重写很麻烦,但是没办法,使用socket去实现http数据请求,处理header部分的意外字符

意外收获:
聪明的你想到了吗,其实这是一个很好的增加webserver安全性和健壮性的方法,利用这个bug,然后给他赋值出去,嘿嘿,剩下的就很清晰了
Tags:  意外地遇到文件尾 意外遇到文件尾 意外的遇到文件尾

延伸阅读

最新评论

发表评论