2017-05-09 2 views
-1

昨日私はここで質問しました。なぜ、password_hash()が作成されていないというコードが作成されていないのですが、最終的にはいくつかのユーザーの助けを借りて作業しています(大いに賛成しました!!) ()。以下は私のコードです、私が何を間違ってやっているか教えてください。私はmd5の代わりにそれを使用するように言われているので、私はpassword_verifyに新しいです。あなたが私に助け(その他のファイル)を与えるために何かを必要とする場合、私は喜んでいるでしょうPHP_verify関数と私のコードで検証する方法は?

<?php 
/* 
* 
* Copyright 2017 by Jarrod Estepp 
* This script is private software and is illegal to 
* use without consent from Jarrod Estepp - [email protected] 
* 
* login_process.php 
*/ 

include('../includes/settings.php'); 
include('../includes/mysql.php'); 

//Grab Login Info 
$email = $_POST['email']; 
$password = $_POST['password']; 

//verify password 
$stored_pass = $conn->query("SELECT password FROM admins WHERE email = '$email'"); 
$password_verify = password_verify($password, $stored_pass); 


$sql = "SELECT * FROM admins WHERE email = '$email' AND password = '$password_verify'"; 
$result = $conn->query($sql); 

if (!$row=mysqli_fetch_assoc($result)) { 
    header("location: {$website_domain}/admin/login?s=1"); 
} else { 
    session_start(); 
    $_SESSION['id'] = $row['id']; 
    $_SESSION['loggedIn'] = true; 
    header("location: {$website_domain}/admin/dashboard"); 
} 

?> 

私は友人がITを防ぐ方法MEを表示するためにTONIGHTを支援している、私のコードは、SQLインジェクションを持つことができます知っています)それらにコメントする。誰かの助けに感謝します。なぜなら、私はコードを覚えるだけで、これは5時間以上かけて私を修正しようとしましたが、まだ何もありません。

すべての回答が高く評価されています。

+0

** WARNING **:自分のアクセス制御層を書くことは容易ではない、それはひどく間違って取得するための多くの機会があります。 [適切に値をエスケープしていない](http://bobby-tables.com/php)のため、これには多くの危険な[SQLインジェクションの脆弱性](http://bobby-tables.com/)があります。このコードでは、誰でもあなたのサイトから何かを得ることができます。 **あなた自身の認証システムを書いてはいけません**。 [Laravel](http://laravel.com/)のような[開発フレームワーク](http://codegeekz.com/best-php-frameworks-for-developers/)には、[認証システム](https: /laravel.com/docs/5.4/authentication)ビルトイン。 – tadman

+0

**警告**:mysqliを使用する場合は、[パラメータ化されたクエリ](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)と['bind_param']( http://php.net/manual/en/mysqli-stmt.bind-param.php)を使用してクエリにユーザーデータを追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成したため、文字列の補間または連結を使用してこれを実行しないでください。 ** '$ _POST'、' $ _GET'、**任意の**ユーザデータを直接クエリーに入れないでください。誰かがあなたのミスを悪用しようとすると非常に危険です。 – tadman

+0

投稿に記載されているように私は安全ではないことを知っています。私は現時点で勉強しています。私はSQLインジェクションを防ぐために今夜私を助けているメンターがいます。これはちょうど私がパネルの上で私が何をする方法を知っていることを作るために始められることができたのでした! –

答えて

0

あなたのアプローチが正しくない場合、password_verifyはブール値を返します(パスワードとハッシュが一致する場合はTRUE、それ以外の場合はFALSEを返します)。パスワードの暗号化は、非可逆的なメカニズムを使用します。つまり、パスワードを復号化できません。 password_verifyメソッドは、指定されたパスワードを暗号化し、パスワードが同じであれば、ハッシュとデータベースに保存されたハッシュを比較します。

は、その後にコードを更新:

if (!$password_verify) { 
    header("location: {$website_domain}/admin/login?s=1"); 
} else { 
    $sql = $conn->query("SELECT * FROM admins WHERE email = '$email'"); 
    $result = $conn->query($sql); 
    $row=mysqli_fetch_assoc($result); 

    session_start(); 
    $_SESSION['id'] = $row['id']; 
    $_SESSION['loggedIn'] = true; 
    header("location: {$website_domain}/admin/dashboard"); 
} 
+0

私の質問にお答えしていただきありがとうございます。私は今それをチェックしている! –

+0

私はこれを最初に試してみました。私の質問に答えるあなたの時間は非常に感謝しています! –

+0

あなたは大歓迎です! :) – rafrsr

0

私は、この行が問題だと思う

$sql = "SELECT * FROM admins WHERE email = '$email' AND password = '$password_verify'"; 

()関数は、基本的に私にaccroding、真または偽であるブール値を返しますが、このようなものが必要そうpassword_verify: -

if (!$password_verify) { 
    header("location: {$website_domain}/admin/login?s=1"); 
} else { 
    session_start(); 
    $_SESSION['id'] = $row['id']; 
    $_SESSION['loggedIn'] = true; 
    header("location: {$website_domain}/admin/dashboard"); 
} 

これはあなたが得ているエラーを解決すると思います。

+0

私の問題でお時間をいただきありがとうございます。私はあなたの答えに非常に感謝します!これがうまくいくかどうかわかります! –

関連する問題