PHPを使用して、安全な「覚えている」システムを作成するにはどうすればよいですか?
-
01-10-2019 - |
質問
ログインシステムがあります。セキュアを実装するにはどうすればよいですか 私を覚えてますか Cookieを使用したシステム。
Cookieのユーザー名とパスワードに保存する必要があるのはどのような値ですが、どのように保護できますか?
解決
次に、DBでSalt Foreachユーザーを定義します
設定で
$expire_time = time() + 2 * 7 * 24 * 3600; // 2 weeks exp time
setcookie(
"rememberMe",
crypt($username, $salt),
$expire_time,
'/'
);
検証について
$_COOKIE['rememberMe'] === crypt($username, $salt)
他のヒント
たぶん、そのユーザーとMACアドレスとデータベースに関連付けられている16の文字/数字文字列を作成して、(人々があまりにも一生懸命努力していない限り)そのマシンのみをログオンできるようにすることができます。
(DBに)訪問者IP、ユーザーエージェント、タイムゾーン、またはインストールされたプラグインを保存する必要があります。 MACアドレスを取得することが問題になる可能性があるため、JavaScriptを使用するのが簡単かもしれません。
次に、ユーザーが前回と同じIP、UA、タイムゾーン、またはプラグインを持っているかどうかを簡単に確認できます:)または、MaxMindを使用して彼の場所を確認し、正しいタイムゾーンを使用しているかどうかを確認できます。疑わしいものがある場合は、Cookieの資格情報を捨てる必要があります。
それにはあまりありません...セッションファイルをクリーンアップさせないでください(ini設定 session.gc_probability = 0
)、およびセッションクッキーを一時的なものから永続的に変更する(ini設定 session.cookie_lifetime = however_long_you_want_the_user_to_be_remembered
).
もちろん、おそらく最終的に古いセッションファイルをクリーンアップしたいので、 非常に クリーンアップが発生する可能性が低いか、外部クリーンアップを行います。いずれにせよ、ユーザーがセッションのクッキーを保持し、セッションファイルを周りに保持している限り、それらは「記憶されている」でしょう。