現在、ユーザーが Google の OpenID を使用してサービスにログインできるようにする GAE アプリケーションを golang で開発しています。各アカウントは明らかに 1 つの Google アカウントにマップされます。ユーザー登録にキャプチャを実装する必要がありますか、それとも OpenID を使用することで、ボット攻撃からサービスを防ぐことができますか?
2 に答える
OpenIDを受け入れていますか? それでは、これは十分な保護ではありません。誰でも自分のドメインに OpenID サイトを立ち上げ、スクリプトを使用して 10 億のアカウントを作成し、そのうちの 1 つを使用してサイトにログインできます。
特定のOpenID プロバイダーのみを受け入れていますか? 次に、OpenID を本来の目的で使用していません (実際、OpenID が作成された理由とは明らかに反対です)。しかし、その場合の答えは次のようになります。OpenID プロバイダーが、アカウント作成時にスパム アカウントを防止するために独自のデューデリジェンスを行っていると信じますか?
いずれにせよ、キャプチャは不十分な解決策であり、現在のところその実装はすべて壊れていることがわかります(ただし、それはまったく別のトピックです)。
まず第一に、ボット攻撃の恐れは本当に予備的な注意です。CSRFトークン(とにかく使用する必要があります)を解析してCookieを処理すると、攻撃者はすでに十分な苦痛を感じることになります。私は誰もがそれを行うことができる唯一の方法である非常に独自のOpenIDプロバイダーを設定することに自分自身を悩ますことはないと思います。
次に、AppEngineのOpenIDFederated LoginはユーザーAPI機能であり、Goランタイムの機能ではありません。任意のOP(Facebook、Yahoo!、Steam ... Google)を使用できます。ユーザーAPIには、OpenIDフェデレーションログインとGoogleアカウントサインインの2つのモードがあります(アプリケーション設定で構成可能)。どちらを選択するかは、要件によって異なります。必要なのがユーザーのGoogleアカウントだけである場合は、後者を使用することをお勧めします。パスワードなしでほとんどすべてを使用してサインインする場合は、OpenIDを選択します。アプリの観点からは、どちらも同じように見えます。ただし、最善の方法はOAuthです。
質問に戻ると、GoogleアカウントAPIとOAuthはどちらもそのような攻撃をほとんど不可能にし、OpenIDを使用すると少し簡単になります。
https://developers.google.com/appengine/docs/go/users/overview