Dans Python 3.3 ou moins, si vous créez un dict
qui inclut une chaîne, des octets et une" valeur "de type datetime, le calcul sera extrêmement difficile et peut mettre une charge énorme sur le CPU, et s'il est abusé par un tiers. Vous pouvez arrêter le service.
Pour éviter cela, vous devez ajouter l'option -R
à la commande python
ou spécifier la variable d'environnementPYTHONHASHSEED = "random"
. [^ 1]
La description de l'option -R
dans 1. Ligne de commande et environnement - Documentation Python 3.3.6 dit: Je suis.
Dans les versions antérieures de Python, cette option active la randomisation de hachage. Cela provoque str, bytes,type datetime__hash__()La valeur est «sel» avec un nombre aléatoire imprévisible. La valeur de hachage est fixe pour chaque processus Python, mais elle devient une autre valeur imprévisible si vous réexécutez Python à plusieurs reprises.
La randomisation de hachage a le pire coût de génération de dict O(n^2)Il est fourni comme défense contre les attaques DoS en donnant une valeur d'entrée soigneusement sélectionnée à être. Pour plus de détails http://www.ocert.org/advisories/ocert-2011-003.Voir html.
Python 3.3 et les versions ultérieures effectuent une randomisation de hachage par défaut, mais les options ci-dessus restent pour la compatibilité. Veuillez noter que de nombreuses personnes utilisent probablement encore la série Python 2.
[^ 1]: "aléatoire" ne signifie pas "insérer une chaîne de caractères aléatoire", mais signifie le définir comme "aléatoire" tel qu'il est écrit.
Recommended Posts