web-dev-qa-db-ja.com

MySQLテーブルに挿入されるパスワードを暗号化する方法は?

動作する登録コードがいくつかありますが、パスワードをハッシュする方法がわかりません。 sha512を使いたいです。

$con=mysqli_connect("localhost","root","","users");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql="INSERT INTO users (username, password, email)
VALUES
('$_POST[username]','$_POST[password]','$_POST[email]')";

if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "Thank you.";

mysqli_close($con);

Mysqlログインにパスワードがないことを認識しています。これは、テストに使用したばかりのローカルmysqlサーバーです。

5
Trevor Zucker

hash()関数を使用して、パスワードをハッシュできます。

_$hashed_password = hash('sha512', $_POST['password']);
_

次に、挿入ステートメントを変更して、ハッシュされたパスワードをデータベースに挿入します。

_INSERT INTO users (username, password, email)
VALUES ('$_POST[username]', '$hashed_password', '$_POST[email]');
_

サニタイズされていないユーザー入力を使用しているため、SQLステートメントはSQLインジェクションに対して脆弱であることに注意してください。セキュリティを向上させ、データの整合性を保護するために、SQLステートメントで使用する前に、入力をエスケープして検証することを検討してください。これを実現する1つの方法は、mysqli_real_escape_string()を使用することです。

_$escaped_username = mysqli_real_escape_string( $con, $_POST['username'] );
$escaped_email = mysqli_real_escape_string( $con, $_POST['email'] );
_
5
George Cummins

あなたがここでしていることに多くの問題があります。

まず、SQLで入力をサニタイズしていないため、SQLインジェクションに対して脆弱です。

次に、このためにSHA512のような高速ハッシュを使用することは避けてください。もはや安全とは見なされていません。 この質問 を見てください。基本的に、bcryptのような適応ハッシュ関数を使用したいと思います。

3
Oleksi

パスワードをハッシュする方法の例を次に示します。

<?php
$password = hash('sha512', $_POST[password]);

パスワードをソルトすることをお勧めします。これについてもっと読む:
http://www.aspheute.com/english/20040105.asp

mysqli_real_escape_string "」についてもお読みください

…およびプリペアドステートメント

2
Markus Hofmann

最初に入力データをサニタイズします。 $ password = filter_input(INPUT_POST、 'password'、FILTER_SANITIZE_STRING);

パスワード文字列をハッシュする

$hashedPassword = hash('sha512', $password);

パスワードをハッシュするより良い方法は、新しいパスワードハッシュAPIを使用することです。

$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
1
tlenss