Maison >développement back-end >Tutoriel Python >Une explication du mécanisme de cookie sécurisé de Tornado en Python

Une explication du mécanisme de cookie sécurisé de Tornado en Python

不言
不言avant
2018-10-19 17:27:372438parcourir

Cet article vous apporte une explication du mécanisme de cookie sécurisé Tornado en Python. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Les cookies sont des données stockées dans le terminal local de l'utilisateur (côté client) par de nombreux sites Web afin d'identifier l'identité de l'utilisateur. L'utilisation de RequestHandler.get_cookie() et RequestHandler.set_cookie() dans Tornado peut être facilement lue. et écrivez des cookies.

Exemple : Lecture et écriture simple de Cookie

import tornado.web

session_id = 1
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        global session_id
        if not self.get_cookie("session"):
            self.set_cookie("session",str(session_id))
            session_id+=1
            self.write("设置新的session")
        else:
            self.write("已经具有session")

if __name__ == '__main__':
    app=tornado.web.Application([
        ("/",MainHandler)
    ])
    app.listen("8888")
    tornado.ioloop.IOLoop.current().start()

Dans cet exemple, la fonction get_cookie() est utilisée pour déterminer si le nom du Cookie [session] existe , et s'il n'existe pas, alors il donne un nouveau session_id.

Dans les applications pratiques, les cookies sont souvent utilisés pour enregistrer les informations de session comme cet exemple.
Étant donné que les cookies sont toujours enregistrés côté client, comment les empêcher d'être falsifiés est un problème que le programme côté serveur doit résoudre.
Tornado fournit un mécanisme de cryptage des informations pour Cookie, empêchant le client d'analyser et de modifier la valeur clé de Cookie à volonté.

Exemple : Cookie sécurisé

Code :

import tornado.web

session_id = 1
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        global session_id
        #get_secure_cookie代替get_cookie
        if not self.get_secure_cookie("session"):
            #set_secure_cookie代替set_cookie
            self.set_secure_cookie("session",str(session_id))
            session_id+=1
            self.write("设置新的session")
        else:
            self.write("已经具有session")

if __name__ == '__main__':
    app=tornado.web.Application([
        ("/",MainHandler)
    ],cookie_secret="JIA_MI_MI_YAO")
    app.listen("8888")
    tornado.ioloop.IOLoop.current().start()

En comparant l'exemple simple de Cookie ci-dessus, vous pouvez trouver la différence :

  • Donnez le paramètre cookie_secret lorsque l'objet tornado.web.Application est initialisé. La valeur du paramètre est une chaîne utilisée pour enregistrer la clé pour le cryptage des cookies sur ce site Web.

  • Utilisez RequestHandler.get_secure_cookie au lieu de l'appel RequestHandler.get_cookie d'origine où les cookies doivent être lus.

  • Remplacez l'appel RequestHandler.set_cookie d'origine par RequestHandler.set_secure_cookie où Cookie doit être écrit,

De cette façon, vous ne le faites pas besoin de s'inquiéter des cookies Le problème de la contrefaçon est résolu, mais la valeur du paramètre cookie_secret, en tant que clé de cryptage, doit être bien protégée et ne peut pas être divulguée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer