OpenIDなしでAPIにパスワードを保存する安全な方法は?
-
28-09-2019 - |
質問
私は尋ねました ここでも同様の質問 しばらく前に、すべての答えはOpenIDを提供していましたが、それは素晴らしいことですが、それを使用しない認証を必要とするサービス(EventBriteなど)では機能しません。
Event Briteのイベントとその分析(Eventbriteに含まれる)をリストするアプリを作成したいとします。誰でも、このサービスにサインアップしてイベントをリストすることができます。しかし、EventBriteには認証が必要なので、ユーザーのログインとパスワードをEventBriteに何らかの形で取得する必要があります。
いくつかの可能な解決策は次のとおりです。
- Yamlに資格情報を保存します このような. 。簡単にハッキングできます。
- ユーザーに資格情報を自分のサイトのフォームに入力してもらい、資格情報をデータベースに保存し、それらを使用してEventBriteにログインします。簡単にハッキングできます。
- ユーザーに資格情報を入力してもらい、保存せずにEventBriteに直接渡すと、応答ヘッダーCookieをデータベースに保存し、期限切れになったら再度ログインします。これは簡単にハッキングできますか?
この仮想サービスは、イベント(Cron経由など)を自動的にチェックすることも望んでいるため、ブラウザを介して私のサイトに行くユーザーに依存しません。したがって、クッキーまたはクレディエンティアルはどこかに保管する必要があります。
事は、 機密性とセキュリティについてこの同様の質問をした後 あなたはすべきだと思う 一度もない 私が説明していることを行うアプリケーションを作成します。このようなものを構築するのは大丈夫です。
そのような方法は何ですか?何が足りないの? #3を使用してCookieを保存しても大丈夫ですか(ただし、EventBriteに送信するフォームでメール/パスワードを送信する必要があります)?問題に対する許容可能な解決策は何ですか?
解決
これを行うための安全な方法はありません。回避策を採用できますが、それはそれについてです。
- YAMLまたはXMLでパスワードをClearTextに保存することは間違いなく出ています
- 実際、パスワードを暗号化して保存することさえも間違っています。アプリケーションにはパスワードを復号化する方法が必要になるため、攻撃者はパスワードを復号化することもできます。
- パスワードを保存する推奨される方法はSALT + HASHですが、回復不能になるため、あなたの場合は役に立たない。
- 2と3のため、ユーザーの資格情報をどこに保存しても、あなたは脆弱です。
- パスワードの代わりにCookieを保存する方が良いアイデアです。しかし、これには、ウェブサイトを通過するパスワードが含まれますが、これは良くありません。
あなたの状況を考えると、Cookieを保管する方が良いアプローチです。あなたのウェブサイトでも、全体を通してHTTPSを使用してください。それは理想的ではありませんが、あなたとあなたのユーザーはそれを認識する必要があります。
他のヒント
EventBriteは最近、説明する新しいドキュメントをリリースしました クロスサイトユーザー認証のためにOAUTH2.0を実装する方法。私たちを使うことをお勧めします JavasciptベースのOAUTH2.0ウィジェット, 、ユーザーの認証トークンをブラウザのLocalStorageにデフォルトで保存します。 AUTHトークンはユーザーのブラウザに保存され、他のドメインからアクセスされることができないため、セキュリティリークがある可能性は低いです。
この認証スキームでは、電子メールとパスワードのコンボの必要性は完全に回避されます。
ほとんどのサイトは、元のClearTextパスワードでの直接ログインのみをサポートするため、それを取得、保存し、提供する必要があります。そして、私はそれであなたを信頼することは決してありません。あなたの概念の問題は、サードパーティにパスワードを指定する必要があることです。解決策は、サードパーティを巻き込むことではありません。たとえば、私のブラウザは、パスワードを自動的に保存して埋めるのがかなり優れています(ハードドライブもパスワードで保護されています)。また、他の数十のパスワードウォレットアプリもあります。あなたのサービスを使用して、購読することによって私は何も得られません。
そのようなビジネスに入る前に、あなたが一番のターゲットになると考えてください。 Facebook、Googleはセキュリティについて非常に妄想的であり、ログインを安全に保つために多くの時間、お金、努力を費やしています。同じリソースはありますか?その後、あなたはより良いターゲットです。また、サービスをハッキングすることにより、彼らはすぐに複数のアカウント、ユーザーのパスワードを取得し、誰が常にパスワードを再利用しているかを確認します。
EventBrite APIを使用するには、すべての接続がSSLを超えていること、およびユーザー名とパスワードではなくuser_keyを使用して認証することを確認することをお勧めします。
EventBrite APIの認証の詳細については、こちらをご覧ください。 http://developer.eventbrite.com/doc/auth/
ログインした後、ユーザーはuser_keyをここで見つけることができます: http://www.eventbrite.com/userkeyapi
これにより、ユーザー名とパスワード情報がワイヤー上で傍受されるか、ローカルデータストアから読み取らないようにする必要があります。