Подделать печенье в колбе - PullRequest
       13

Подделать печенье в колбе

0 голосов
/ 04 октября 2018

У меня есть следующая полезная нагрузка:

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()

Я пытался передать полезную нагрузку как в формате dict, так и в виде строки.

Когда я пытаюсь передать как строку, а затем повторно проанализировать ответ, чтобы убедиться, что он закодирован правильно, я получаю следующее:

{" b":"<blob>"}

где BLOB-объект - это фактически моя полезная нагрузка, закодированная с использованием base64.urlsafe_b64encode.

Когда я передаю дикт, я получаю это:

{"_fresh":True,"_id":{" b":"<blob>"},"csrf_token":{" b":"<blob>"},"user_id":{" b":"MA=="}}

, где капли - это закодированные в 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

1 Ответ

0 голосов
/ 04 октября 2018

Так что, как выясняется, самый простой ответ, как правило, правильный: при создании диктанта, пригодного для использования в колбе, значения должны включать префикс 'u', иначе будет также закодирован в base64, таким образом, получая любойбыл создан как нечитаемый.

Таким образом, в основном, если нужно использовать следующий код:

{'user':'hello'}

, вам нужно написать:

{'user':u'hello'}

и готово.

...