2011-07-22 4 views
9

Je suis récemment tombé sur les problèmes de sécurité des modules pickle et cPickle de Python. De toute évidence, aucune mesure de sécurité réelle n'est implémentée dans Pickle sauf si vous remplacez par la méthode find_class en tant que modification de base pour obtenir un peu plus de sécurité. Mais j'ai souvent entendu dire que JSON est plus sécurisé.Sécurité JSON contre Pickle

Quelqu'un peut-il développer un peu à ce sujet? `Pourquoi JSON est-il plus sûr que le pickle?

Merci beaucoup! Mark

+3

Que voulez-vous dire par "est tombé sur"? Vous avez lu quelque chose qui disait qu'ils n'étaient pas sûrs? Vous avez implémenté quelque chose qui a été piraté? Ou quoi? –

Répondre

12

json est plus sûr car il est fondamentalement plus limité. Les seuls types de python qu'un document json peut coder sont unicode, int, float, NoneType, bool, list et dict. ceux-ci sont marshalés/démasqués d'une manière fondamentalement triviale qui n'est pas vulnérable aux attaques par injection de code.

6

Le problème de Pickle est qu'il peut invoquer du code Python arbitraire. Voir http://nadiana.com/python-pickle-insecure pour plus de détails. L'analyseur JSON doit uniquement créer des chaînes, des nombres, des listes, des dicts, etc. Il ne crée jamais de classes définies par l'utilisateur, il n'a donc pas besoin d'exécuter Python arbitraire.