如何禁止在芹菜腌制序列化

Celery默认使用pickle作为任务的序列化方法。 正如常见问题中所述,这代表了一个安全漏洞。 Celery允许您使用CELERY_TASK_SERIALIZERconfiguration参数configuration如何序列化任务。

但这并不能解决安全问题。 即使任务使用JSON或类似的方式进行序列化,工作人员仍然会使用pickle序列化执行插入到队列中的任务 – 它们只是响应消息中的content-type参数。 因此,任何可以写入任务队列的人都可以通过编写恶意的pickle对象来有效地执行worker进程。

我怎样才能防止工作线程运行任务序列化与泡菜?

我得到了“ContentDisallowed:拒绝反序列化pickletypes的非信任内容(application / x-python-serialize)”

有:

 CELERY_ACCEPT_CONTENT = ['json'] 

是不够的…我还必须添加以下设置:

 CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' 

我从芹菜用户邮件列表中得到答案(从Ask Solem来具体说明)。 将这两行添加到configuration(celeryconfig / settings):

 from kombu import serialization serialization.registry._decoders.pop("application/x-python-serialize") 

现在,Celery支持每个应用程序的configuration,有一个更简洁的方式来限制消费者将执行的内容。

 c = celery.Celery() c.conf.update(CELERY_ACCEPT_CONTENT = ['json']) 

有关详细信息,请参阅有关安全性的Celery文档 ,以及更高级的安全性选项(如签名内容)。