2017-02-14 12 views
0

次のpostgresqlコマンドを使用して、特定の電子メール/ハッシュされたpwの組み合わせのレコードを取得しようとしています。私はパスワードと電子メールをテーブルに格納しており、クエリは正常にパスワードチェックのためにfまたはtを引き出すようですが、PHPスクリプトは出力を処理するようには見えません。select exists()を使ってpostgresのパスワードをPHPと比較する

PHP:

// 2. Check Passwords 
    $sql = "select exists(select 1 from users where (email='".$email."') AND (pw = '".$password."'));"; 
    echo $sql . "<br>"; 

    $ret = pg_query($db, $sql); 
     if(!$ret){ 
      echo pg_last_error($db); 
      exit; 
     } 
    if($ret === true){ 
      echo "Login Successful"; 

    }else{ 
      $errors = $errors . "Passwords do not match. Please try again. <br>"; 
    } 

これは、現在、TまたはFのいずれかで正常

 exists 
-------- 
t 
(1 row) 

を返すSQLクエリ

select exists(select 1 from users where (email='[email protected]') AND (pw = '8a8bA3anjqV.g')); 

を出力します。

これは私のPHPスクリプトではうまくいかない理由を理解できないようです。 (すべての結果(tまたはf)に失敗します)

ご意見は大変ありがとうございます。

+2

あなたのコードはSQLインジェクションのために広く開いています。可能であれば、パラメータ化されたクエリを使用する必要があります。 「PHPでのSQLインジェクションを防ぐには?」(https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)を参照してください。あなたがpgSQLを使っているので違います。 – Bytewave

+0

同じプログラムで先に消毒しました...データベースのクエリレベルでサニタイズする必要がありますか? – itchyspacesuit

+1

データベースがエスケープする必要がなく、開発者が考慮していないエクスプロイトをいくつか見逃す可能性があるため、パラメータ化されたクエリはより安全です。 SQL文全体を1つの完全SQL問合せとして実行するのではなく、データがバインドされているSQL問合せを効果的に排除する問合せを作成します。 – Bytewave

答えて

0

Aha!

私は私のPHPで愚かだった。

コードを次のように改訂しましたが、今はうまくいくようです。

// 2. Check Passwords 
    $sql = "select exists(select 1 from users where (email='".$email."') AND (pw = '".$password."'));"; 
    echo $sql . "<br>"; 

    $ret = pg_query($db, $sql); 
     if(!$ret){ 
      echo pg_last_error($db); 
      exit; 
     } 
    $bool = pg_fetch_row($ret); 
    echo $bool['0'] . "<br>"; 
    if($bool['0'] === "t"){ 
      echo "Login Successful"; 

    }else{ 
      $errors = $errors . "Passwords do not match. Please try again. <br>"; 
    } 

ブールが容易に入手できないようですし、あなたはその後、リターン結果から配列行を抽出トン/ Fを取得するためにゼロ番目の要素にアクセスする必要があります。また、ブール値ではないようです(値が "t"であってもtrueは失敗します)。

これが誰かを助けることを願っています!

+0

実際の例では、拡張子があります:https://www.postgresql.org/docs/9.5/static/pgcrypto.html – greg

関連する問題