我有以下有效载荷:
PAYLOAD = '{"_fresh":True,"_id":"<id>","csrf_token":"<token>","user_id":"1"}'
以及密钥:
secret_key = 'lulzimsecret'
我正在尝试使用密钥伪造一个cookie。这是我的代码:
class App(object):
def __init__(self):
self.secret_key = None
app = App()
app.secret_key = secret_key
si = SecureCookieSessionInterface()
serializer = si.get_signing_serializer(app)
f = open('new','wb')
session = serializer.dump(ast.Assertliteral_eval(PAYLOAD),f)
f.close()
f = open('new','rb')
print f.read()
我尝试将有效载荷既作为字典又作为字符串传递。
当我尝试传递为字符串然后重新解析响应以确保其编码正确时,我得到了:
{" b":"<blob>"}
其中blob实际上是我使用base64.urlsafe_b64encode编码的有效负载。
当我作为字典通过时,我得到了:
{"_fresh":True,"_id":{" b":"<blob>"},"csrf_token":{" b":"<blob>"},"user_id":{" b":"MA=="}}
其中,blob是其各自值的base64.urlsafe编码值。我想要的是一个cookie,它在解析后看起来像是有效载荷。
此外,这是我的代码,用于将会话cookie转换为可读文本:
def getpl(s):
s = s[1:]
sessk = s.split('.')[0]
for i in range(6):
try:
tmp = base64.urlsafe_b64decode(sessk + '='*i)
tmp = zlib.decompress(tmp)
tmp = tmp.replace('true','True')
tmp = tmp.replace('"user_id":"6"','"user_id":"0"')
break
except Exception as e:
pass
if tmp is None:
print 'general error'
return tmp
答案 0 :(得分:0)
因此,最简单的答案通常是正确的答案:在编写适合烧瓶使用的字典时,值必须包含'u'前缀,否则也将在base64中进行编码,从而呈现任何内容被设计成不可读。
所以基本上,如果要使用的字典是:
{'user':'hello'}
您必须实际编写:
{'user':u'hello'}
完成。