動作する登録コードがいくつかありますが、パスワードをハッシュする方法がわかりません。 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サーバーです。
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'] );
_
あなたがここでしていることに多くの問題があります。
まず、SQLで入力をサニタイズしていないため、SQLインジェクションに対して脆弱です。
次に、このためにSHA512のような高速ハッシュを使用することは避けてください。もはや安全とは見なされていません。 この質問 を見てください。基本的に、bcryptのような適応ハッシュ関数を使用したいと思います。
パスワードをハッシュする方法の例を次に示します。
<?php
$password = hash('sha512', $_POST[password]);
パスワードをソルトすることをお勧めします。これについてもっと読む:
http://www.aspheute.com/english/20040105.asp
「 mysqli_real_escape_string "」についてもお読みください
…およびプリペアドステートメント。
最初に入力データをサニタイズします。 $ password = filter_input(INPUT_POST、 'password'、FILTER_SANITIZE_STRING);
パスワード文字列をハッシュする
$hashedPassword = hash('sha512', $password);
パスワードをハッシュするより良い方法は、新しいパスワードハッシュAPIを使用することです。
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);