首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止memcached CacheKeyWarning's的好的/结构化的方法是什么?

防止memcached CacheKeyWarning's的好的/结构化的方法是什么?
EN

Stack Overflow用户
提问于 2012-10-11 22:40:47
回答 2查看 2.8K关注 0票数 4

我想知道是否有人知道一种方便的方法或方法,以确保您传递给django.core.cache.set()cache.get()的密钥是安全的。

来自https://docs.djangoproject.com/en/1.3/topics/cache/#cache-key-warnings

Memcached是最常用的生产缓存后端,它不允许缓存键超过250个字符,也不允许包含空格或控制字符,使用这些键将导致异常。

我在这里找到了一个md5_constructor()函数:https://github.com/django/django/blob/master/django/utils/hashcompat.py

也许有一种方法是让你一直使用的钥匙变成MD5?不是100%确定这是否安全。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-12 13:11:06

您可能需要使用自定义键函数FUNCTION

在您的设置中设置它:

代码语言:javascript
复制
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'KEY_FUNCTION': 'path.to.my.make_key',
        'LOCATION': [
            '127.0.0.1:11211',
        ]
    }
}

我会用这样的方法:

代码语言:javascript
复制
from django.utils.encoding import smart_str

def _smart_key(key):
    return smart_str(''.join([c for c in key if ord(c) > 32 and ord(c) != 127]))

def make_key(key, key_prefix, version):
    "Truncate all keys to 250 or less and remove control characters"
    return ':'.join([key_prefix, str(version), _smart_key(key)])[:250]
票数 8
EN

Stack Overflow用户

发布于 2012-10-12 01:15:01

  1. md5_constructor是标准库中的hashlib.md5,它的digest方法可以返回符合长度限制的安全密钥。如果原始密钥的长度大于250,则应使用它或其他人来确保密钥安全。
  2. 对于原键中的每个字符,请确保ord(character) >= 33 (如果不是)用下划线或其他您喜欢的安全字符替换不安全字符。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12849681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档