2

作成した Web サイトにログイン フォームがあります。パスワードの確認に PHP を使用しました。パスワードは MYSQL データベースに保存されています。直面している問題は、パスワードの大文字と小文字が区別されないことです。大文字と小文字を区別せずに文字を受け入れます。 .Kubuntu Linux OS を使用しています

誰かがこの問題を解決するのを手伝ってくれませんか?.これを避けるために、mysql/my.cnf の COLLATION にどの値を使用する必要がありますか?または、これに対する他の解決策はありますか?

どんな助けでも大歓迎です。

ありがとう。

4

6 に答える 6

10

あなたの MySQL照合はおそらく大文字と小文字を区別しません。パスワードが格納される列を大文字と小文字を区別する照合に変更します。

いくつかの経験則:

  • 照合順序が _ci で終わる場合、大文字と小文字は区別されません。
  • 照合順序が _cs で終わる場合、大文字と小文字が区別されます。

例:

  • utf8_general_ci は大文字と小文字を区別しません。
  • utf8_bin は大文字と小文字を区別します

ただし、重要な注意事項

この問題が発生している場合は、パスワードを間違って保存している可能性があります。パスワードを平文で保存するのではなく、代わりにパスワードのハッシュを保存し、適切にソルトする必要があります。

次に、ユーザーがログインすると、そのエントリをハッシュし、そのハッシュを DB が保持するものと比較します。両方が等しい場合、ユーザーは正しいパスワードを入力した可能性があります。

于 2012-04-10T07:56:35.867 に答える
1

一般的なテキストでパスワードを保存しているようです。そうでなければ、照合のようなものutf8_general_ciは一般的に問題にはならないはずです。

パスワードを保存するときは、md5()またはsha1()を使用してパスワードをハッシュする必要があります。

于 2012-04-10T08:02:32.327 に答える
1

これは、パスワードをプレーンテキストで保存していることを意味しますが、これは通常はお勧めできません。とにかく、1 つのオプションは、パスワードを取得し、WHERE 句ではなく PHP で比較することです。

于 2012-04-10T07:58:55.913 に答える
1

問題を解決するもう 1 つの方法は、データベースに保存する前にパスワードをハッシュすることです。これにより、パスワードが暗号化されずにデータベースに保存されないため、セキュリティも向上します。

$hash_to_store_in_database = sha1($password);

ソルトやその他すべてのセキュリティ機能を使用して、ハッシュ化されたパスワードを保存する方法を Web で検索できます。

于 2012-04-10T07:58:59.580 に答える
1

Konerakの答えは正しいですが、別の方法でパスワードを平文で保存するのではなく、ハッシュ、おそらくmd5or sha1.

于 2012-04-10T07:59:11.343 に答える
0

PHPでstrcmp関数を使用するか、次のようなものを使用できます

"SELECT [...] WHERE BINARY tablename.password = $form_password"
于 2012-04-10T08:00:16.303 に答える