如何禁止在芹菜腌制序列化
Celery默认使用pickle作为任务的序列化方法。 正如常见问题中所述,这代表了一个安全漏洞。 Celery允许您使用CELERY_TASK_SERIALIZER
configuration参数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文档 ,以及更高级的安全性选项(如签名内容)。
- gcc -D_FORTIFY_SOURCE = 1和-D_FORTIFY_SOURCE = 2之间的差异
- 当用户不在授权angular色中时,如何提供未经授权的页面?
- Django设置'SECRET_KEY'的目的
- 为什么WordPress仍然使用addslashes(),register_globals()和magic_quotes?
- 为什么跨域Ajax是一个安全问题?
- 如何在tomcat / java webapps中configurationHttpOnly cookie?
- HTTPS标头是否被encryption?
- 禁用firefox同源策略
- PHP:mysql_real_escape_string是否足以清理用户input?