0

私がやろうとしているのは、ランダム化されたパスワードを使用してユーザーをテーブルに挿入し (ここまでは正常に動作します)、フォームの送信が成功すると、登録ユーザーにパスワードを送信することです。これは私がこれまでに得たものです:

<?php
if (isset($_POST['insert'])) {
require_once 'login.php'; 

  $OK = false;
  $conn = new mysqli ($host, $user, $password, $database) or die("Connection Failed");
  $stmt = $conn->stmt_init();


  $sql = 'INSERT INTO users (user_email, user_name, user_pref, user_password)
          VALUES(?, ?, ?, des_encrypt(substring(md5(rand()),1,8)))';
  if ($stmt->prepare($sql)) {
    // bind parameters and execute statement
    $stmt->bind_param('ssss', $_POST['user_email'], $_POST['user_name'], $_POST['user_pref'], $_POST['user_password']);
    // execute and get number of affected rows
    $stmt->execute();
    if ($stmt->affected_rows > 0) {
      $OK = true;
    }
  }
  if ($OK) {
    header('Location: confirm.php');
    exit;
  } else {
    $error = $stmt->error;
  }
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Add User</title>
</head>

<body>
<h1>Add User</h1>
<?php if (isset($error)) {
  echo "<p>Error: $error</p>";
} ?>
<form id="form1" method="post" action="">
  <p>
    <label for="user_email">User email:</label>
    <input name="user_email" type="text" class="widebox" id="user_email">
  </p>
    <p>
    <label for="user_name">User name:</label>
    <input name="user_name" type="text" class="widebox" id="user_name">
  </p>
    <p>
    User role: <select name = "user_pref">
    <option value = "BLU">Blue</option>
    <option value = "YEL">Yellow<option>
    <option value = "GRE">GREEN</option>
    </select>
</p>
  <p>
    <input type="submit" name="insert" value="Register New User" id="insert">
  </p>
</form>
</body>
</html>

復号化されたパスワードとユーザーの電子メールを選択する sql ステートメントは次のようになります。

$sql = 'select user_email, des_decrypt(user_password) from users where person_id = max(person_id)';
$result = $mysqli->query($sql)

そして、それはこの関数内に入ります:

if ($OK) {
}

ただし、基本的なメール機能では動作しませんでした。誰にも私を助けるアイデアはありますか?

ありがとう

4

1 に答える 1

0

ここで回答する 2 つの異なるトピックがあります。

  1. より一般的なパスワード処理は次のようになります。

    1. ユーザーが登録フォームにパスワードを入力できるようにします (「再入力」フィールドを使用し、両方のフィールドに同じ文字列が含まれていることを確認します。JavaScript スニペットを使用して、特定のパスワードの複雑さを強制します - オンラインで十分に利用できるはずです)
    2. パスワードのハッシュをデータベースに保存し、暗号化機能を元に戻すのが困難 (SQL の bcrypt またはPHP のcrypt ) を使用します。
    3. セキュリティをさらに強化するには、time() または rand() を使用して疑似ランダムソルトを作成し、これをユーザーのパスワードに連結し、連結された文字列を暗号化関数で使用します。塩もDBに保存することを忘れないでください
    4. 「パスワードを忘れた」機能を提供し、従来の二重認証を使用します。ユーザーがパスワードを要求すると、このユーザーの登録済み電子メール アドレスにワンタイム トークンを含む電子メールが送信され、ユーザーはパスワードを入力する必要があります。トークンを取得 (またはトークンが GET パラメーターとして設定されているリンクをクリック) し、パスワードを変更できるのは今だけです。
  2. PHP (およびその他のスクリプト言語) でのメールは扱いにくい場合があります。PHP 自体にはメール クライアントが組み込まれていませんが、スタンドアロンの電子メール コンポーネントを使用する必要があります。あなたまたはあなたの管理者は、次のことを確認する必要があります。

    • サーバーは電子メール機能を提供します (たとえば、Linux システムの sendmail パッケージ)
    • サーバーは世界中にメールを送信できます。つまり、ファイアウォール/ルーター/プロキシは、メールポートのトラフィックを許可する必要があります

PHP を使用したメール送信に関する詳細については、マニュアルを参照してください: mail

于 2013-01-30T14:51:35.077 に答える