2016-05-21 7 views
-1

私が作っているアプリのために私のクライアント側から私のサーバーに話を聞こうとしています。私は新しいユーザーにサインアップしたいと思います。私は確かに、確かに、オンラインでいくつかの研究を通じて、これを行うに行く最善の方法です。iOSアプリの場合は、クライアント側またはサーバー側をハッシュする必要があります。なぜですか?

私はこのようにそれを考えています:

  1. は、TextFieldからパスワードを取得し、安全に関連する他の情報を含むサーバーにHTTPSを介してPUTリクエストを送信します。

  2. Pythonで書かれたサーバーに、saltでパスワードをハッシュします。

  3. は、新しいユーザーが作成された後に実行する必要がある確認メールまたはテキストを実行します。

+0

[security.SE](https://security.stackexchange.com/) – MilkeyMouse

答えて

0

免責事項:私はセキュリティ専門家ではありません。専門家の助言を得るには、Security.StackExachangeをチェックしてください。

this stackoverflow questionの回答は、あなたと本質的に同じですが、参考になるかもしれません。

私の意見では、サーバー側をハッシュして塩をかけるのが最善です。 TLSを使用していて、あなたのアプリが銀行なんかそんなものでないなら、あなたは大丈夫でしょう。 TLSは公開鍵暗号を使用してWebパケットを暗号化します。誰かがあなたの秘密鍵を把握できれば、あなたのパケットを解読してその内容を読むことができますが、秘密鍵を渡さない限り何百万年もかかることになります(thisをチェックして解読する)。

実際にセキュリティを強化する必要がある場合は、別のアルゴリズムを使用してクライアント上のパスワードを暗号化し、サーバー上で復号化することができます(プライベートキーをサーバーに保存する別のレベルの公開キー暗号化)。ほとんどの場合、これは必要ではありません。

クライアントのハッシングは、システムのセキュリティを向上させないことに注意してください。攻撃者がパケットを復号化してハッシュ化されたパスワードを取得できる場合は、平文でパスワードにアクセスした場合と同じようにデータベースにアクセスできます。

いずれの場合でも、ネットワーク上でユーザーのパスワード(ハッシュまたはハッシュ)を渡す必要がある回数を最小限にすることをお勧めします。ユーザーがアカウントを作成し、パスワードをハッシュして塩漬けしてデータベースに保存したら、その後のリクエストで使用できるAPIキー(おそらくJWTなど)を返すことを検討することもできます。

+0

にもっと適しているかもしれません。私はセキュリティフォーラムに質問を投げましたが、今までは分かりませんでした。あなたがAPIキーについて話しているとき、私はあなたがリアルタイムチャットのような情報を更新したいときにいつも使う鍵について話していると思った。これは一意のユーザーIDに過ぎませんか、業界がそのようなことをどのようにして行うかを知っていますか? – ggworean

+0

これは実装しているサーバーの種類によって異なります。アプリケーションにAPIを公開するRESTサーバーの場合、一般的なアプローチはAPIトークンを使用してリクエストを認証することです。ユーザーIDをAPIトークンとして使用できますが、これはお勧めしません。トークンは、ユーザーがサービスにアクセスできるようにするもので、攻撃者が推測するのは困難です。一般に、ユーザーIDはAPIトークンよりもはるかに複雑ではありません(つまり、生成が容易です)。さらに、APIトークンは一般に、ユーザーIDが静的である間にセキュリティーを改善するために循環されます。 – kcstricks

+0

ああ、私はあなたがapiトークンの意味を混乱させた。 APIトークンは各ユーザーにサインアップされ、固有のものになるように各ユーザーに与えられますか?JavascriptでGoogle Maps APIを使用する場合は、基本的に許可を得るためにAPIトークンを用意する必要があります。 – ggworean

関連する問題