2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-09-12

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"と設定するという意味です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?