渡ってきた値(名前又パスワード)がDBに登録されていたら、登録済みという処理をしたいのですが、重複していても登録されてしまいます。
どこを直せば良いか教えて下さい。宜しくお願いします。
<?php
session_start();
$name = $_SESSION['name'];
$pass = $_SESSION['pass'];
?>
省略
<body>
<?php
try {
$pdo =new PDO('省略');
$sql = 'SELECT * FROM テーブル名 WHERE name = ? OR password = ?';
$stmt = $pdo->prepare($sql);
$stmt->bindValue(1, $name, PDO::PARAM_STR);
$stmt->bindValue(2, $pass, PDO::PARAM_STR);
$stmt->execute();
$rec = $stmt->fetch(PDO::FETCH_ASSOC);
if ($rec['name']== $name) {
echo '既に登録されています。';
echo '<form>';
echo '<input type="button" onclick="history.back()" value="戻る">';
echo '</form>';
exit();
}
if(password_verify($pass,$rec['password']??"")) {
echo '既に登録されています。';
echo '<form>';
echo '<input type="button" onclick="history.back()" name="戻る">';
echo '</form>';
exit();
}
No.2
- 回答日時:
推測するに、パスワードはハッシュ化されて管理されているようなので、厳密に重複を防ぐ方法はありません。
というかパスワード重複を検知できるのは脆弱性につながるので、仕様見直しをお勧めします。
入力の name を引数に
select * from テーブル名 where name = ?
の結果が1レコードでもあれば、「既に名前が登録済み」
入力の pass を password_hash した結果を引数に
select * from テーブル名 where password = ?
の結果が1レコードでもあれば、「だれかのパスワードとして使われている可能性ありハッキングチャンスですよ」
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポインタ配列をfscanfで読み込...
-
Flaskでサーバー立ち上げに関して
-
Fortranでのファイル名操作につ...
-
WordのIDataObject::GetData呼...
-
POSTの項目に追加
-
phpで変数を使ってcopyできない
-
PHPからHTMLへの変数の受け...
-
重複を防ぐ記述について教えて...
-
csvファイルチェック
-
検索結果の出力先を違うフレー...
-
phpでショッピングカート機能を...
-
phpで、フォームのラジオボタン...
-
phpでのセレクトボックスの値を...
-
プルダウンとCSVの連動
-
<input type="hidden" >で配列...
-
アマゾンのような評価の星を選...
-
POSTを使わずに値を渡す方法
-
PHPのエラーの解消法について教...
-
laravelを利用してコントロール...
-
「"」(ダブルクォーテーション)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Flaskでサーバー立ち上げに関して
-
重複を防ぐ記述について教えて...
-
VBA で、スペースを含むファイ...
-
phpで変数を使ってcopyできない
-
PHPで入力フォームでデータを確...
-
PHPからHTMLへの変数の受け...
-
POSTの項目に追加
-
PHP MySql 画像を取得
-
MySQL,PHPのリロードによる二重...
-
UPDATEできない
-
ファイル名を変更してアップロ...
-
php、sqlite3にデーター追加で...
-
openCVのトラックバーについて
-
複数条件での検索について教え...
-
PHP5でsimple_xml_load_fileす...
-
PHPのリロード時の処理
-
連想配列を複数条件で比較して...
-
PDOのprepareでLIKEの部分一致...
-
POSTされない
-
アップロードしたファイルの絶...
おすすめ情報
御解答ありがとうございます。
>入力の pass を password_hash した結果を引数にselect * from テーブル名 where password = ?
$pass = $_SESSION['pass'];
$pass=password_hash($pass,PASSWORD_DEFAULT);の後、
$sql='SELECT~'に入れ、
$stmt->bindValue~をし
$stmt->execute();で実行。
$rec = $stmt->fetchAll(PDO::FETCH_ASSOC);をし
if(password_verify($pass,$rec['password']??"")) {
echo '既に登録されています。';
としたのですが、やはり同じパスワードを入力しても登録されてしまいます。
なにか足りない所があるのでしょうか?