0

私はこのHTMLコードを持っています:

<form action="register.php" method="post">
       Email: <input type="text" name="email" /><br />
       Username: <input type="text" name="username" /><br />
       Password: <input type="password" name="p" id="password" /><br />
       <input type="button" value="Register" onclick="formhash(this.form, this.form.password);" />
</form>

登録ボタンが押されると、暗号化が呼び出され、パスワードがすぐに暗号化されます。これは非常に優れた安全な方法だと思いましたが、「p」という名前の passworld フィールドが空かどうかを確認できないようです。ユーザーが登録時にフィールドを空のままにしておくと、暗号化によって空のフィールドなので、もう空ではありません。0 文字でパスワードを作成することはできないため、ユーザーが「p」フィールドを空のままにしているかどうかを確認する方法が必要です。

この問題は JavaScript で解決できることはわかっていますが、フィールドが空かどうかを確認する安全な方法が必要なので、PHP ソリューションを入手したいと考えています。

register.php:

<script type="text/javascript" src="sha512.js"></script>
<script type="text/javascript" src="forms.js"></script>

<?php
include 'db_connect.php';

//Just to check that the p field is encrypted already at this point. 
echo $_POST['p'];

// The username
$username = $_POST['username'];
// The email
$email = $_POST['email'];
// The hashed password from the form
$password = $_POST['p']; 
// Create a random salt
$random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true));
// Create salted password (Careful not to over season)
$password = hash('sha512', $password.$random_salt);

// Add your insert to database script here. 
// Make sure you use prepared statements!
if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password, salt) VALUES (?, ?, ?, ?)")) {    
   $insert_stmt->bind_param('ssss', $username, $email, $password, $random_salt); 
   // Execute the prepared query.
   $insert_stmt->execute();
}
?>
4

2 に答える 2