多くの可能なアプローチの1つは次のとおりです。
注: Pure PHP でコーディングしました。しかし、ロジックはすべての言語で同じです。
- $redirect = FALSE に設定します。
- $_GET["logout"] は設定されていますか? はいの場合は 3 へ、そうでない場合は 5 へ
- 設定されている場合、削除、認証、rem_me Cookie、セッションの破棄。
- ログインフォームを表示して終了します。
- これは投稿リクエストですか?はいの場合は 6 へ、そうでない場合は 18 へ
- $redirect = TRUE に設定します。
- ユーザー名とパスワードは提供されていますか? はいの場合は 8 へ、そうでない場合は 3 へ
- $username、$pass-hash、$rem-me-hash を db から取得します。
- $username と $password は DB と同じですか? はいの場合は 10 へ、そうでない場合は 3 へ
- Set cookie["username"] = sanitized($_POST["username"])
- $auth = sha1(username.password.time.6random_letters) を含む Cookie["auth"] を発行します。
- セッション ["auth"] = sha1($auth) を設定します。$auth の設定を解除します。
- 記憶するオプションが選択されていますか? はいの場合は 13 へ、そうでない場合は 15 へ
- $rem = sha1($user_string.$time.$password.$username.$random) を設定します。
- cookie["rem"] = $rem を設定
- $rem = 0 に設定
- $rem != $rem-me-hash_DB の場合、$rem を DB に挿入します。23へ
- $rem Cookie は設定されていますか? はいは 19 へ、それ以外は 20 へ
- $rem cookie == $rem-hash-in-db ですか? はいの場合は 22 へ、そうでない場合は 3 へ
- $username-cookie && $auth-cookie &&auth-SESSION は設定されていますか? はいの場合は 21 へ、そうでない場合は 3 へ
- sha1($auth-cookie) === $_SESSION["auth"] ですか? はいの場合は 22 へ、そうでない場合は 3 へ
- $redirect == TRUE ですか? はいの場合は、301、GET メソッドを使用してこの同じページにリダイレクトします。そうでなければ23へ
- これが私の超秘密のスタートレックの壁紙(コンテンツ)です。
長いプロセスですが、(できれば) すべてのシナリオを網羅しています。
このすべてのアルゴリズムを に保存し、password.php
保護するすべてのファイルの上にこのファイルを含めます。秘密のコンテンツに対する制御は、考えられるすべてのシナリオを通過した場合にのみ実現されます。エラーが発生するたびに、スクリプトはログイン フォームを表示して終了します。
また、Post-Redirect-Get ( Wikipedia ) アプローチを実装します。このアプローチでは、POST 要求を取得して処理し、ユーザーを GET メソッドでリダイレクトして、[戻る] ボタンと [更新] ボタンを押したときにフォームが二重に送信されるのを防ぎます。
上記の説明には、タイプミスまたは混合概念がある可能性があります。改善点があれば教えてください。