Help us understand the problem. What is going on with this article?

Python3.3未満ならDoS対策に-Rオプションか環境変数PYTHONHASHSEED="random"を使おう

More than 3 years have passed since last update.

Python3.3未満では、str、bytes、datetime型の「ある値」を含むdictを作ると計算がものすごーーーーく大変でCPUに莫大な負荷をかける場合があって、第三者が悪用するとサービスを停止させることができます。

これを防ぐには、 python コマンドに-Rオプションを付けるか、環境変数PYTHONHASHSEED="random"を指定する必要があります。1

1. コマンドラインと環境 — Python 3.3.6 ドキュメント-Rオプションの説明にはこう書かれています。

以前のバージョンの Python では、このオプションはハッシュのランダム化を有効にします。これにより、 str, bytes, datetime 型の __hash__() 値が予測不可能な乱数で “salt” 化されます。ハッシュ値は各 Python プロセスでは固定ですが、 Python を繰り返し再実行した場合は別の予測不能な値になります。

ハッシュのランダム化は、 dict の生成コストが最悪の O(n^2) になるように注意深く選ばれた入力値を与えることによる DoS 攻撃への防御策として提供されています。詳細は http://www.ocert.org/advisories/ocert-2011-003.html を参照してください。

Python3.3以上ではデフォルトでハッシュのランダム化をやってくれますが、互換性のために上記オプションは残っています。
たぶん、まだPython2系を使っている人は多いと思いますので、ご注意ください。


  1. "random"は「ランダムな文字列を入れる」という意味ではなくて、書いてある通り"random"と設定するという意味です。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away