次の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)に失敗します)
ご意見は大変ありがとうございます。
あなたのコードはSQLインジェクションのために広く開いています。可能であれば、パラメータ化されたクエリを使用する必要があります。 「PHPでのSQLインジェクションを防ぐには?」(https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)を参照してください。あなたがpgSQLを使っているので違います。 – Bytewave
同じプログラムで先に消毒しました...データベースのクエリレベルでサニタイズする必要がありますか? – itchyspacesuit
データベースがエスケープする必要がなく、開発者が考慮していないエクスプロイトをいくつか見逃す可能性があるため、パラメータ化されたクエリはより安全です。 SQL文全体を1つの完全SQL問合せとして実行するのではなく、データがバインドされているSQL問合せを効果的に排除する問合せを作成します。 – Bytewave