JSON-RPC にパスワードを追加する変更を SVN にアップロードした。ビルド環境がある方は、テストしてほしい。
-server スイッチは -rpcpw=<password> に置き換えられ、bitcoind でも使用される。
bitcoin -rpcpw=
スイッチ名のより良いアイデアがあれば知らせてほしい。ただし、データベースの暗号化用のパスワードもいずれ必要になることを念頭に置いてほしい。確信はないが、2 つのパスワードを別々に使いたい人もいるかもしれない。
パスワードを設定しないと警告が表示される。
すべてのコマンドで最初のパラメーターとしてパスワードが必要になった。bitcoind help を実行するとその旨が表示される。
中核コード:
// パスワード確認
if (params.size() < 1 || params[0].type() != str_type)
throw runtime_error("First parameter must be the password.");
if (params[0].get_str() != strRPCPassword)
{
if (strRPCPassword.size() < 15)
Sleep(50);
begin = strRequest.end();
printf("ThreadRPCServer incorrect password attempt
");
throw runtime_error("Incorrect password.");
}
これらの判断についてコメントはあるか?
-
if (strRPCPassword.size() < 15) Sleep(50); — これは短いパスワードの場合、各試行後に 50ms 待機することを意味する。これは DoS 攻撃に利用される可能性があるが、短いパスワードの場合はブルートフォースのパスワードスキャンから保護する方が重要だと判断した。これにより外部の人にパスワードが 15 文字未満かどうかがわかってしまう可能性があるが、15 文字未満はそれほど注目すべきことではなく、ほとんどのパスワードは 15 文字未満だ。DoS の可能性を閉じたい場合は、15 文字以上のパスワードを使用してほしい。
-
begin = strRequest.end(); — 複数の呼び出しを含む単一のリクエストの場合、1 つが不正なパスワードであれば残りを破棄する。これは 1 つのパケットに何百万ものパスワード試行を詰め込めないようにするためだ。これは正しい判断だと思うか?(複数呼び出しはほとんど使われないと思うが)
ヘルプに重複して表示されていた 2 つのコマンドも修正した:
getaddressesbylabel