Si Python est inférieur à 3,3, utilisez l'option -R ou la variable d'environnement PYTHONHASHSEED = "random" pour les contre-mesures DoS.

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

Si Python est inférieur à 3,3, utilisez l'option -R ou la variable d'environnement PYTHONHASHSEED = "random" pour les contre-mesures DoS.
Le mémo le plus court pour créer un environnement python qui prend moins de 5 minutes pour fonctionner.
[Python] Qui est exécuté en premier, variable de classe ou __init__?
[Python] Détermine si un point de coordonnée est à l'intérieur ou à l'extérieur du polygone