python - shared_task - how to execute celery tasks
Cómo rechazar la serialización de pepinillos en apio (3)
El apio usa por defecto pickle como su método de serialización para las tareas. Como se menciona en las FAQ , esto representa un agujero de seguridad. Celery le permite configurar cómo se serializan las tareas utilizando el parámetro de configuración CELERY_TASK_SERIALIZER
.
Pero esto no resuelve el problema de seguridad. Incluso si las tareas se serializan con JSON o similar, los trabajadores seguirán ejecutando las tareas insertadas en la cola con la serialización de pickle; solo responden al parámetro de content-type
en el mensaje. Por lo tanto, cualquiera que pueda escribir en la cola de tareas puede identificar eficazmente los procesos del trabajador escribiendo objetos en escabecho malintencionados.
¿Cómo puedo evitar que los hilos de trabajo ejecuten tareas serializadas con pickle?
Ahora que Celery admite configuración por aplicación, existe una forma más clara de restringir el contenido que ejecutará un consumidor.
c = celery.Celery()
c.conf.update(CELERY_ACCEPT_CONTENT = [''json''])
Consulte los documentos de Celery sobre seguridad para obtener más información y opciones de seguridad más avanzadas, como la firma de contenido.
Obtenía "ContentDisallowed: Negarse a deserializar el contenido no confiable del tipo pickle (application / x-python-serialize)"
teniendo:
CELERY_ACCEPT_CONTENT = [''json'']
no fue suficiente ... Tuve que agregar los siguientes a la configuración:
CELERY_TASK_SERIALIZER = ''json''
CELERY_RESULT_SERIALIZER = ''json''
Recibí una respuesta de la lista de correo de apio-usuarios (de Ask Solem para ser específico). Agregue estas dos líneas a la configuración (apical config / settings):
from kombu import serialization
serialization.registry._decoders.pop("application/x-python-serialize")