2017-04-05 9 views
-3

セキュリティで保護されたユーザ名を書くには& PHPでパスワードを確認しますか?SQLインジェクションを防ぐためにPHPで安全なユーザー名とパスワードの検証を書くには?

パスワード($ pass)にMD5を使用し、ユーザー名($ name)に文字列を使用し、このコードをPHPでユーザーアカウントの確認用に記述します。

$post_vars = $_POST; 
if (isset($post_vars['name'])) 
     { 
     $name = $post_vars['name']; 
     $pass = md5($post_vars['pass']); 
     $dbConn = db_open(); 
     $sql = "select `password` from `user_table` where `user_name` = '$name' limit 1;"; 
     echo $sql; 
     $sth = $dbConn->prepare($sql); 
     $sth->execute(); 
     $row = $sth->fetch(); 
     if ($row !== false) 
     { 
      $verify = $row['password']; 
      if ($pass == $verify) 
      { 
      $_SESSION['isLoggedIn'] = true; 
      header('Location: ' . _DEBUG_URL_); 
      } 
      else $iframeURL = _LIB_URL_ . 'accessdenied.htm'; 
     } 
     else echo 'No results found!'; 
    } 

このクエリはSQLインジェクションの方法でハック可能ですか?どのようにハッキングできますか?私はPDOをMySQLに使用しています。

"select `password` from `user_table` where `user_name` = '$name' limit 1;" 
+0

また 'の代わりに' md5'のパスワードhashing'を使用しています。正しい方法で 'prepare'も使用していません –

+0

ダイへの生き方として、パスワードハッシングを使用しました!あなたはGoogleの "md5"の亀裂があり、簡単にmd5のハッシュをクラックすることができます。 – bedtime21

+0

私はそれが私の質問は安全でないかどうかを知りたいのですか? –

答えて

-2

フォームフィールドでMysql注入が行われると、ユーザーはログインフォーム内でクエリを入力するだけでログインできます。あなたはPDO::prepareステートメントを使用することができますhere

を見つけた私も、クエリのこのようなsprintf()とすることをお勧めします:

$sql = sprintf("select `password` from `user_table` where `user_name` = '%s' limit 1", $name); 
+1

私の目は信じられません。保護のためのsprintf?真剣に? –

+0

@YourCommonSense私はそれが保護のためだとは言いませんでしたか?私はちょうどそれをお勧めします..? – KittyCat

+1

男は彼の質問を保護する方法を尋ねました。彼はsprintfに$ nameを直接追加することを勧めました。あなたの答えにはどんなロジックがありますか? –

関連する問題