2011-12-30 6 views
1

でログイン私は最近、私のウェブサイト上での提案の多くを持っていた、そのうちの一つは、彼らが小文字でユーザー名でログインできるようにすることでした。ユーザ名とログインが、小文字のユーザー名

JOHNDOEがデータベースにそのようなユーザー名を持っていた場合、私は彼らがログインしようとしましたが、彼らはそれらの首都を置く場所を覚える必要があれば、それは非常に迷惑になるだろうと確信しています。

は、だから私は、彼らはジョン・ドウではなく、このユーザー名JOHNDOEでログインできるようにそれを作りたかったです。覚えやすい。

私のクエリは、現在

$get_user_info = mysql_query("SELECT * FROM users WHERE username = '$entered_username' AND md5_username = '$md5_entered_username' AND password = '$entered_password' LIMIT 1"); 

され、その後、それはどのように私はこれについて行くだろう

if (mysql_num_rows($get_user_info)==1) { 
//then log them in 
} else { 
//kick 'em out! 
} 

を続けるのだろうか?

+7

なぜユーザー名のmd5ハッシュを保存して比較しますか?なぜパスワードのハッシュを保存しないのですか?それは意味をなさない! // EN:私は[SQLインジェクション](HTTPを防ぐために[PHPプリペアドステートメント](http://php.net/manual/en/pdo.prepared-statements.php)を使用していないPHPのコードを見ると – Dan

+2

は、私が心配して取得します。 wikipedia.org/wiki/SQL_injection)の脆弱性です。私はここに貼り付けられていないコードであなたの変数を消毒することを願っています。そうでない場合は、変数をサニタイズするのではなく、PDO Prepared Statementsを使用するコードを書き直すことを検討してください。 – sarnold

+1

Whoa、あなたはSQLインジェクションのために広く開いています。 [PHPでSQLインジェクションを止める最善の方法](http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php)のSOスレッドをチェックしてください。 – sczizzo

答えて

4
  1. それはユーザ名の

  2. のMD5ハッシュは大文字と小文字の問題として無意味だろうSQLインジェクション攻撃を排除するようにユーザー名をフォーマットしていることを確認します。これで、パスワードを比較

    $get_user_info = mysql_query(
        "SELECT * FROM users WHERE username = '$entered_username' LIMIT 1") 
    

    を代わりにパスワードをハッシュする必要があると

  3. プレーンテキストで

  4. ことを格納されていない。しかし、現在のDBモデルに基づいて

    $entered_username = strtolower($entered_username); 
    $get_user_info = mysql_query("SELECT * FROM `users` WHERE LOWER(`username`) = '$entered_username' AND `password` = '$entered_password' LIMIT 1"); 
    

    の場合:あなたは

    私はおよそセキュリティ(特にパスワードハッシュ...)に同意するすべてのコメントから別に
+2

私のセキュリティをあまりにも多く疑問視するのではなく、実際に質問に答えてくれてありがとう。 – Frank

+0

Npでもセキュリティは重要です。多くの大規模なサイトは、SQLインジェクション攻撃によって削除されています。 1つの一般的な規則は、ユーザーからの入力を常にフィルタリングすることです。 –

+0

私はいつもそれを行います。ユーザが作成したデータを保持する変数は、mysql_real_escape_string()で実行され、htmlでstrip_tags()でフィルタリングされます。これで十分ですか? – Frank

2

、小文字を区別しないユーザー名のケースを作るには、MD5のユーザー名を使用することはできませんあなたのユーザ名は一意である(私は彼らがしていると仮定し...)、あなたはLIMIT句を削除することができますし、また、パスワードのチェックを外し、PHPでログイン・エラーを処理するより良いことができるようにそれを行うことができます(とは別に存在しないユーザー名間違ったパスワード)。

関連する問題