ホームページ  >  記事  >  バックエンド開発  >  ログイン関数は一般的にどのように書かれていますか?

ログイン関数は一般的にどのように書かれていますか?

WBOY
WBOYオリジナル
2016-06-23 13:54:16898ブラウズ

私が知っている方法は、ユーザー名を使用してパスワードを照会し、それが正しければログインに成功し、Cookie を使用してユーザー ID とユーザー名を保存することです。
これは少し簡単ではありませんか?次のステップは何ですか?


ディスカッションに返信(解決策)

彼らは皆これをやっています!
ユーザーを通じてデータをクエリし、データ内のパスワードを比較します。パスワードは暗号化されています。

COOKIES 部分は機能しません。方法が単純すぎます。ユーザー UID と時間 IP フラグを含めて暗号化する必要があります。

アクセスすると、プログラムは COOKIE に基づいてデータを復号化し、それをデータベースと比較して、同じ人がログインしているかどうかを確認します

いくつかの権限検証を追加する必要がある場合もあります。一般的なアプリケーションには権限管理モジュールが含まれます。ログイン時に権限を確認することは避けられません。詳細については、いくつかのソースコードを参照してください。

私はあなたより少し上級です。確認コードを追加することは重要ですか?

基本的な方法はパスワードを暗号化することです。

私はあなたより少し上級です。確認コードを追加することは重要ですか?

私もです。

最も簡単なのは、ユーザー名とパスワードを確認することです。それから、同時にログインできないことをバックグラウンドで確認できます。
ユーザーが間違ったユーザー名またはパスワードを入力する回数を制限することもできます。エラーが多すぎると、一定期間ログインできなくなります。実はよく考えてみると、ログイン機能にはまだまだ追加できることがたくさんあります。 。

SQL インジェクションの問題に注意してください。

SELECT count(*) FROM user WHERE un = 'xxx' and pw = 'xxx'

このメソッドは使用しないでください。
代わりに、最初に指定されたユーザー名
SELECT pw FROM user WHERE un = 'xxx' 

をクエリし、返された結果の数が 0 より大きいかどうかを判断します
次に、パスワード (pw) を取得します。正しいかどうかを判断するには


SQL インジェクションの問題に注意してください

SELECT count(*) FROM user WHERE un = 'xxx' and pw = 'xxx'

このメソッドは使用しないでください
代わりに、最初に指定されたユーザー名
SELECT pw FROM user WHERE un = 'xxx' 

をクエリし、返された結果の数が より大きいかどうかを判断します。ゼロ
次に、正しいかどうかを判断するためのパスワード (pw) を取得します



これが正解です。これが基本的なログイン機能の実装方法です
以上から、皆さんは初めてのことだと思われます。 、ログイン状態では Cookie は使用されません。Cookie が使用されている場合はどうすればよいですか? Cookie がインターネット上の攻撃に対して脆弱であることを考えたことはありますか? もちろん、パスワードは保存しないでください。セキュリティ上の理由から、session.cookie_httponly も設定されます。検証コードに関しては、一度間違って入力した後で、失敗したユーザーのログインをカウントするのが最もユーザーフレンドリーな方法です。必要に応じてロックし、1 時間後に再び操作できるようになります。

SQL インジェクションの問題に注意し、

SELECT count(*) FROM user WHERE un = 'xxx' and pw = 'xxx'

このメソッドを使用しないでください
代わりに、最初に指定されたユーザー名
SELECT pw FROM user WHERE un = 'xxx' 

をクエリし、返された結果の数が 0 より大きいかどうかを確認します
次に、パスワード (pw) を取得しますそれが正しいかどうかを判断するため



なぜそんなことをするのですか?どれも同じではないですか?

私はあなたより少し上級です。確認コードを追加することは重要ですか?


ログインを忘れないように追加します


SQL インジェクションの問題に注意してください。

SELECT count(*) FROM user WHERE un = 'xxx' and pw = 'xxx'

このメソッドは使用しないでください
代わりに、最初に指定されたユーザー名
SELECT pw FROM user WHERE un = 'xxx' 

をクエリし、返された結果の数がゼロより大きい
を取得し、パスワード (pw) を取得して正しいかどうかを判断します



なぜこれを行うのですか?それらはすべて同じではありませんか?

変数を受け取ったときにフィルタリングするだけです。予防的な設計は SQL の外にある必要があります。 私のものはあなたのものよりも単純です...

基本的に LDAP 認証に基づいています。したがって、入力を少し決定してから検証します
検証に合格した場合は、データベースにこの ID の情報があるかどうかを判断します。ない場合は、LDAP から取得してデータベースに書き込みます。関連する情報をセッションに直接返します...

最も簡単なのは、ユーザー名とパスワードを確認するだけで、同時にログインできないかどうかを追加できます。

間違ったユーザー名またはパスワードを入力する回数を制限することもできます。 エラーの回数が多すぎると、一定期間ログインできなくなります。実はよく考えてみると、ログイン機能にはまだまだ追加できることがたくさんあります。 。


解決策を修正し、パスワードを暗号化して復号化して読み取ります

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。