Membuat Formulir Pendaftaran yang Aman dari SQL Injection dan Lainnya dengan PHP

Membuat Formulir Pendaftaran yang Aman dari SQL Injection dan Lainnya dengan PHP

Dalam contoh ini, kami menggunakan beberapa tindakan keamanan, termasuk:

  • Melakukan validasi pada input form untuk memastikan semua kolom telah diisi.
  • Melakukan escape pada data input menggunakan fungsi mysqli_real_escape_string() untuk mencegah serangan SQL injection.
  • Memeriksa apakah email yang diinput sudah pernah digunakan sebelumnya untuk mencegah serangan duplikasi data.
  • Menggunakan fungsi password_hash() untuk melakukan hash pada password pengguna sebelum disimpan ke dalam database.
  • Menggunakan session untuk menyimpan informasi pengguna yang berhasil login.
  • Mengalihkan pengguna ke halaman dashboard setelah berhasil login.

Selain itu, kami juga menggunakan pesan error untuk memberi tahu pengguna tentang kesalahan yang terjadi selama proses pendaftaran.

Namun, perlu diingat bahwa contoh ini hanya sebagai panduan dan tidak cukup untuk melindungi website dari serangan keamanan yang lebih kompleks. Selalu pastikan untuk melakukan tindakan keamanan yang lebih lanjut, seperti penggunaan parameterisasi query, untuk memastikan keamanan website Anda.

<?php
// Mulai session
session_start();

// Memeriksa apakah pengguna sudah login atau belum
if(isset($_SESSION['user_id'])) {
  header("Location: dashboard.php");
  exit;
}

// Memeriksa apakah form telah disubmit
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  // Memeriksa apakah input sudah diisi
  if (empty($_POST['name']) || empty($_POST['email']) || empty($_POST['password'])) {
    $error = "Silakan lengkapi semua kolom.";
  } else {
    // Menghubungkan ke database
    $conn = mysqli_connect("localhost", "username", "password", "database");

    // Memeriksa koneksi database
    if (!$conn) {
      die("Koneksi database gagal: " . mysqli_connect_error());
    }

    // Melakukan escape pada data input untuk mencegah serangan SQL injection
    $name = mysqli_real_escape_string($conn, $_POST['name']);
    $email = mysqli_real_escape_string($conn, $_POST['email']);
    $password = mysqli_real_escape_string($conn, $_POST['password']);
 
    // Memeriksa apakah email sudah digunakan
    $check_email = mysqli_query($conn, "SELECT * FROM users WHERE email = '$email'");
    if (mysqli_num_rows($check_email) > 0) {
      $error = "Email sudah digunakan.";
    } else {
      // Melakukan hash pada password menggunakan fungsi password_hash() di PHP
      $hashed_password = password_hash($password, PASSWORD_DEFAULT);

      // Memasukkan data ke dalam database
      $sql = "INSERT INTO users (name, email, password) VALUES ('$name', '$email', '$hashed_password')";
      if (mysqli_query($conn, $sql)) {
        // Mengatur session dan mengalihkan ke halaman dashboard
        $_SESSION['user_id'] = mysqli_insert_id($conn);
        header("Location: dashboard.php");
        exit;
      } else {
        $error = "Terjadi kesalahan pada pendaftaran.";
      }
    }
  }
}

// Menampilkan form pendaftaran
?>
<!DOCTYPE html>
<html>
<head>
  <title>Pendaftaran</title>
</head>
<body>
  <?php if(isset($error)) { ?>
    <p><?php echo $error; ?></p>
  <?php } ?>
  <form method="post">
    <label for="name">Nama:</label><br>
    <input type="text" id="name" name="name"><br>
    <label for="email">Email:</label><br>
    <input type="email" id="email" name="email"><br>
    <label for="password">Password:</label><br>
    <input type="password" id="password" name="password"><br>
    <input type="submit" value="Daftar">
  </form>
</body>
</html>