0

単純なフォームがあるとしましょう。

<form action="register.php" method="post">
<label>Password:</label>
<?php if (isset($errors[1])) echo $errors[1]; ?> <- Displays error message if there is one
<input type="password" name="user_pass" />
<label>Confirm Password:</label>
<input type="password" name="user_pass_confirm" />

<input type="submit" />
</form>

$user_pass = $security->encrypt($_POST['user_pass']);
$user_pass_confirm = $security->encrypt($_POST['user_pass_confirm']);

$registration->form($user_pass, $user_pass_confirm);

そしてクラス:

if (empty($user_pass)) {
$errors[1] = 'Passwords  required';
} else if ($user_pass != $user_pass_confirm) {
$errors[1] = 'Passwords don't match';
}

//if error array empty, create member

私がやろうとしているのは、パスワードを検証して必要なものにし、それらが一致することを確認することです。また、preg_match正規表現を追加して、少なくとも8文字の長さであることを確認します。

私の問題は、パスワードを送信する前にすでに暗号化されていることです(暗号化されていないパスワードは投稿しないでください。間違っている場合は、訂正してください)。

そして、クラスがエンコードされた文字列を取得すると、それを検証するために何もできなくなります。フィールドを暗号化/ソルトバージョンの何もないものと比較することで空をチェックできますが、それはそれを行う方法ではないと確信しています。

パスワードを検証するための標準的な手順や、ソリューションに関する提案を教えてもらえますか?

どうもありがとう

4

1 に答える 1

1

PHPはクライアント側では実行できません。PHPはサーバー側の言語であるため、PHPを使用してプレーンパスワードをサーバーにプレーンで送信せずに暗号化することはできません。パスワードにアクセスするには、パスワードをサーバーに送信する必要があります。httpsを介したSSL/TLSのようなメカニズムを利用できますが、これはPHPコードには影響しません。

つまり、フォームが送信される前にPHPを使用してパスワードを暗号化することはできません。これは、JavaScriptなどのクライアント側プログラミング言語で実行できます。パスワードがOK(空ではなく、十分に長く/安全ではない)かどうかをチェックするJavaScript関数を実装し、後でJavaScriptでパスワードを暗号化してからサーバーに送信し、暗号化されたパスワードがサーバーに転送されるようにすることができます。

<form action="register.php" method="post">
...
</form>
<?php
//$user_pass = $security->encrypt($_POST['user_pass']);
//$user_pass_confirm = $security->encrypt($_POST['user_pass_confirm']);
//$registration->form($user_pass, $user_pass_confirm);
//YOUR PASSWORD HAS NOT BEEN SENT TO YOUR SERVER YET. YOU CANNOT ACCESS IT USING PHP.
//YOU WOULD NORMALLY DO SOMETHING LIKE THIS (IN REGISTER.PHP)
if(isset($_POST["name_of_your_submit_field"])) //WHICH MEANS THAT YOUR FORM HAS BEEN SUBMITTED NOW
{
    //This checks whether the POST-variable of your submit field is set.
    //If it is, you know that the client has submitted the form and sent the form data to your server.
    //Only here you can access the form data.
    $user_pass=$_POST['user_pass'];
    if(strlen($user_pass) > 8)
    {
        $user_pass = $security->encrypt($user_pass);
        $user_pass_confirm = $security->encrypt($_POST['user_pass_confirm']);
        $registration->form($user_pass, $user_pass_confirm);
    }
}
?>
于 2012-10-29T01:39:39.820 に答える