2017-09-25 8 views
0

が働いている:ログインフォームの安全措置

$username = trim($_POST['username']); 
$password = trim($_POST['password']); 
$pass=md5($password); 
$stmt = $mysqli->prepare("SELECT id FROM users WHERE username = ? AND password = ?"); 
$stmt->bind_param('ss', $username, $pass); 
$stmt->execute();  
$stmt->store_result(); 
$stmt->bind_result($id); 
$stmt->fetch(); 

if ($stmt->num_rows == 1) { $_SESSION['name']=$id; echo'user logged in';} 
else {echo'invalid username/password';} 
$stmt->close(); 

しかし、私は、あまりにも何か他のものを使用する必要がありますか?それとも十分?私は文を準備するのが初めてであるので、構文がうまく書かれているかどうかを知りたいと思います。

+2

1つは、md5ではなくpassword_hash/password_verifyを使用する必要があります。 (すでにパスワードをmd5として保存していれば動作しません) –

+0

準備文はどうですか?書きましたか? – rimas

+0

用意されたステートメントの部分はうまく見えますが、 'trim'で削除される先行/後ろのスペースがないことを確認するためにパスワードを保存するときは、必ず確認する必要があります。 password_hash + password_verifyを使用するように切り替える場合は、ユーザー名のみに基づいて選択してレコードをフェッチし、パスワードを確認するだけで少し変更する必要があります。 –

答えて

0

一方では、SQLインジェクションを防ぐために非常に便利なプリペアドステートメントを使用していますが(パフォーマンス上の可能性を除いて)、プリペアドステートメントに関する良い点は、間違った結果をもたらす可能性がありますが、攻撃者はクエリ文字列を連結します。

しかし、パスワードをハッシュするのにmd5()を使用しています.は、が推奨されていません。コメントに示唆されているように、PHPにはパスワードを管理するために特別に作成された2つの関数、password_hash()password_verify()があります。

データベースに保存されているパスワードの再生成を意味する場合でも、この機能は現在ほとんど役に立たないので、料理を強くお勧めします(md5では攻撃者が1台または2日間で簡単にすべてのパスワードを解読できます)ハイエンドのグラフィックスカードを使用)。

編集

は、あなたがこのように漸進的移行、何かを作ることができpassword_hash()ですべてのあなたの既存のパスワードを焼き直しには:

  • あなたは空のデフォルトでは、新しいパスワードのDB内の別のフィールドを追加します。
  • 新しいパスワードフィールドにpassword_hash()で取得したハッシュを格納し、古いフィールドを空のままにして新しいユーザーを追加します。あなたはそれ双方向作るためにログインコードを変更する既存のユーザーの場合
    • 新しいフィールドが空白の場合、あなたは古いものに対してパスワードをチェックし、パスワードが正しい場合は、とパスワードを焼き直しpassword_hash()、それを新しいフィールドに保存し、古いものの値を空にします。最後のステップは、安全でないハッシュを取り除くことが重要です。
    • 新しいフィールドが空でない場合、そのユーザーは既に移行されているか、新しいユーザーであるため、新しいフィールドをpassword_verify()と確認します。もちろん

古いハッシュを削除しているため、生産に入れる前に、これをダブルチェック。多くのユーザーがいる場合や散発的にログインしている場合は時間がかかることがありますが、十分に活用されている場合は、プロセスを高速化するために必須のログインを注文することができます。

+1

md5を使用すると、ほとんどのパスワードを1つまたは2つの_minutes_に_aウェブブラウザを搭載したコンピュータでクラックすることができます。_;) –

+0

@ Don'tPanic良いことに、私はクラウドコンピュータを考えませんでした。 –

+0

さて、クラウドステーションなどは知っています。先日、職場のレガシーシステムからパスワードを回復するために使用しました。簡単なピーシー –

関連する問題