質問: ユーザー認可が必要なWebサイトを作成しています。生きるためのウェブサイトを作成するのは初めてのことであり、初めての認可をしようとする私にとって初めてのことです。私の計画は次のとおりです。私に明白なループホールがあるかどうか教えてください。他に何か知っていなければならないことがありますか?興味があるか関連があるなら、私はフロントエンドで安らかなnodejsとmysqlバックエンドとバックボーンを使用しています。プロセスにおける ログイン: 1. ユーザーがログインしようとしたメールアドレスとパスワードをランダムに生成されたキーを(ビットの量を決めていない)送信します。 2. 許可サーバーはこの情報を受け取り、電子メール・アドレスとパスワードを暗号化し、許可データベースのuser_auth表の値と照合します。一致するものがあれば、セッションIDを作成します。 3. 次に、認証サーバーは、セッションID、電子メールアドレス、およびユーザー生成のランダムキーを(主にデータサーバーによってアクセスされるデータデータベース内の)セッションテーブルの行に配置し、ユーザーにセッションIDと任意のセッションIDをキーとして暗号化された他の関連ページデータ。 4. このすべてが成功すると、ユーザーはセッションIDを受信し、セッションIDを使用して追加のデータとすべての将来のデータを復号化します。 5. クライアントは、データサーバに送信された元のランダムに生成された鍵で暗号化された電子メールアドレスとセッションIDを送信し、セッションIDと電子メールアドレスが一致すると、データが復号化されますそのキーを使用して、データが処理されようとします。 もちろん、SQLクエリが生成される前にすべてのデータのサニタイズを試みますが、ライブフォームの検証とバックボーンモデルの検証も行われます。 nodejsサーバが使用するmysqlユーザは、削除されたパーミッションを持つことはありません。削除パーミッションは、タグ付きで処理され、デーモンはバックエンドで実行されます。 1. ユーザーが認証サーバへの電子メールアドレス、パスワード、名、姓を提出します:アカウントを作成するには 。 2. 認証サーバーはこれをdatetimeと一緒にtemp_userテーブルに配置し、URLに組み込まれたセッションIDを使用してきれいに電子メールを作成します。 3. ユーザーは、電子メールのリンクをクリックすると、「あなたのアカウントは有効になっています」ページなどが表示されます。リンクをクリックすると、セッションIDの値がクライアントのコードに保存され、サーバーに送信されるランダムに生成されたキーが作成されます。成功すると、実際にユーザーにページが表示されます。 4. サーバー側では、認証サーバーは、暗号化されたユーザー名とパスワードを認可データベースのuser_authテーブルに配置し、姓と名をデータ・データベースのユーザー・テーブルに入れてから削除しますtemp_userテーブル内の対応する行に対して削除パーミッションが設定されます。 5. クライアントとサーバーは、最初のシナリオと同じページにある必要があります。 セッションIDがnullの場合、または一致しない場合は、再度ログインするように求められます。プロセスがやり直されます。 紛失しているものはありますか?
回答: **ホイールを改造しないでください。** まず、既存のセッションハンドラと認証システムの使用をお勧めします。 nodejsは人気があり、あなたが使用できるライブラリがたくさんあります。 OAuthは美しい標準であり、ユーザーを保護します。 言われているように、このリストには欠けているものがたくさんあります。 OWASP Authentication Cheat SheetとOWASP Session management cheat sheetを読むことをおすすめします。 OWASP top 10も読んでください。これらの問題の多くは、セッションやアカウントのセキュリティを損なう可能性があります。 あなたのデザインの最大の問題のいくつか:セッションの生活のため**使用HTTPS、パスワードを暗号化することはありません、彼らは常に**でなければなりません**をハッシュ化されました。また、たくさんの "暗号化"が間違っている可能性があります。これは魔法の杖ではありません。**非常に少数の開発者**がこれを適切に実装しています。 (結局のところ、誰も亀裂を起こすことはできません。**DOUBLE** rot-13の暗号化です。**