Leo*_*opd 41 python security celery
Celery默认使用pickle作为任务的序列化方法.如常见问题解答中所述,这代表了一个安全漏洞.Celery允许您使用CELERY_TASK_SERIALIZER配置参数配置任务的序列化方式.
但这并不能解决安全问题.即使使用JSON或类似方法序列化任务,工作人员仍将使用pickle序列化执行插入队列的任务 - 它们只响应content-type消息中的参数.因此,任何可以写入任务队列的人都可以通过编写恶意的pickle对象来有效地显示工作进程.
如何防止工作线程运行使用pickle序列化的任务?
nao*_*oko 63
我得到了"ContentDisallowed:拒绝反序列化pickle类型的不可信内容(application/x-python-serialize)"
有:
CELERY_ACCEPT_CONTENT = ['json']
Run Code Online (Sandbox Code Playgroud)
还不够......我还必须在设置中添加以下内容:
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
Run Code Online (Sandbox Code Playgroud)
Leo*_*opd 11
我从celery-users邮件列表中得到了答案(来自Ask Solem具体).将这两行添加到配置(celeryconfig/settings):
from kombu import serialization
serialization.registry._decoders.pop("application/x-python-serialize")
Run Code Online (Sandbox Code Playgroud)
现在Celery支持基于每个应用程序的配置,有一种更简洁的方法来限制消费者将执行的内容.
c = celery.Celery()
c.conf.update(CELERY_ACCEPT_CONTENT = ['json'])
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅Celery文档中的安全性,以及更高级的安全性选项,例如签名内容.