0

「パスワード」列を SHA2 で暗号化しようとしています。問題は、MYSQL へのインジェクションが $_POST 変数を介して行われるため、SHA2() をどこに配置すればよいかわかりません。

ここに私の「挿入」ページ(inscreate.php)があります:

  <?php
    include 'header.php';
    $ins="INSERT INTO users (uname, pwrd, bdate, mail)
        VALUES ('$_POST[uname]','$_POST[pwrd]','$_POST[bdate]','$_POST[mail]')";
if (!mysqli_query($con,$ins))
      {
      die('Error: ' . mysqli_error($con));
      }
    echo "User added! You will be returned to the index page!";

    mysqli_close($con);
    ?>  

私が読んだことから、挿入クエリの「値」セクションにそれを入れる必要があります: http://coderlearner.com/MySQL_Encryption-Decryption_Example_SHA2

だから私はこれらの組み合わせを試しました:

$ins="INSERT INTO users (uname, pwrd, bdate, mail)
            VALUES ('$_POST[uname]','SHA2($_POST[pwrd])','$_POST[bdate]','$_POST[mail]')";

ただし、パスワードがたとえば mypass の場合、データベースの出力は次のようになります: SHA2(mypass)

私はこれを試しました:

$ins="INSERT INTO users (uname, pwrd, bdate, mail)
    VALUES ('$_POST[uname]',$_POST[SHA2(pwrd)]','$_POST[bdate]','$_POST[mail]')";

しかし、その後、解析エラーが発生します(理由は理解できますが、まだ試していました) だから私の質問は: $_POST を暗号化する方法を知っている人はいますか??

4

3 に答える 3

1

SHA* ハッシュ関数は速すぎるため、パスワードには適していません。あなたの例のもう1つの問題は、無塩のハッシュを生成していることです。PHP 関数password_hash()を見てください。これは BCrypt ハッシュを生成し、安全なソルトの生成を処理します。古い PHP バージョン用の互換パックもあります。

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);

これは、SQL ステートメント内でパスワードを直接検証することはできず、代わりにデータベースから (ユーザー名で) ハッシュを読み取り、このハッシュで password_verify() を呼び出すことも意味します。

于 2014-04-24T09:34:33.367 に答える
0

SHA2('$_POST[pwrd]',256)代わりに使用'SHA2($_POST[pwrd])'

$ins="INSERT INTO users (uname, pwrd, bdate, mail)
       VALUES 
('$_POST[uname]',SHA2('$_POST[pwrd]',256),'$_POST[bdate]','$_POST[mail]')";
于 2014-04-24T09:02:33.533 に答える