2011-07-22 23 views
9

Recientemente me encontré con los problemas de seguridad de los módulos pickle y cPickle de Python. Obviamente, no hay medidas de seguridad reales implementadas en pickle a menos que sobrescriba el método find_class como una modificación básica para obtener un poco más de seguridad. Pero a menudo escuché que JSON es más seguro.JSON vs. Pickle security

¿Alguien puede explicar un poco sobre esto? ¿Por qué es JSON más seguro que pickle?

¡Muchas gracias! Mark

+3

¿Qué quiere decir con "encontré"? ¿Leíste algo que decía que eran inseguros? ¿Implementaste algo que fue pirateado? ¿O que? –

Respuesta

12

json es más seguro porque es fundamentalmente más limitado. Los únicos tipos de Python que puede codificar un documento json son unicode, int, float, NoneType, bool, list y dict. estos son marshaled/unmarshalled de una manera básicamente trivial que no es vulnerable a ataques de inyección de código.

6

El problema de Pickle es que puede invocar el código de Python arbitrario. Vea http://nadiana.com/python-pickle-insecure para más detalles. El analizador JSON solo tiene que crear cadenas, números, listas, dictados, etc. Nunca crea clases definidas por el usuario, por lo que no necesita ejecutar Python arbitraria.