Keamanan akun pengguna adalah prioritas utama dalam pengembangan aplikasi web modern. Salah satu fitur penting yang sering diabaikan adalah notifikasi ke email lama saat ganti email saat pengguna mengganti alamat email mereka. Mengapa ini penting? Bayangkan jika akun seseorang diretas dan penyerang mengganti email login-nya. Dengan sistem email change alert, pemilik asli akan segera tahu dan dapat mengambil tindakan, seperti mengamankan akun atau meminta reset password.
Konsep Fitur
-
User mengganti email baru.
-
Sistem menyimpan email lama dan email baru.
-
Jika proses ganti email sukses → kirim email notifikasi ke alamat lama.
-
Pesan berisi waktu perubahan, IP address, dan langkah keamanan.
Struktur Tabel Database
Tabel: users
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100),
email VARCHAR(255),
password VARCHAR(255),
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Langkah 1: Form Ganti Email
File: change_email.php
<form method="post" action="process_change_email.php">
<div class="form-group">
<label>Email Baru</label>
<input type="email" name="new_email" class="form-control" required>
</div>
<button type="submit" name="change_email" class="btn btn-primary">Ubah Email</button>
</form>
Langkah 2: Proses Perubahan Email dan Kirim Notifikasi
File: process_change_email.php
<?php
session_start();
require 'config.php';
require 'vendor/autoload.php'; // PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
if (isset($_POST['change_email'])) {
$user_id = $_SESSION['user_id'];
$new_email = trim($_POST['new_email']);
// Ambil email lama
$stmt = $conn->prepare("SELECT email, username FROM users WHERE id = ?");
$stmt->bind_param("i", $user_id);
$stmt->execute();
$stmt->bind_result($old_email, $username);
$stmt->fetch();
$stmt->close();
// Update email
$stmt = $conn->prepare("UPDATE users SET email = ? WHERE id = ?");
$stmt->bind_param("si", $new_email, $user_id);
if ($stmt->execute()) {
// Kirim notifikasi ke email lama
sendEmailAlert($old_email, $username, $new_email);
echo "<script>alert('Email berhasil diubah. Notifikasi dikirim ke email lama.'); window.location='profile.php';</script>";
} else {
echo "<script>alert('Gagal mengubah email.'); window.history.back();</script>";
}
}
function sendEmailAlert($to, $username, $new_email) {
$mail = new PHPMailer(true);
try {
// Konfigurasi SMTP
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = 'your_email@gmail.com';
$mail->Password = 'your_app_password';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
// Penerima
$mail->setFrom('your_email@gmail.com', 'Security Alert');
$mail->addAddress($to);
// Konten email
$mail->isHTML(true);
$mail->Subject = " Perubahan Email Akun Anda";
$mail->Body = "
<h3>Hai, $username </h3>
<p>Kami mendeteksi perubahan alamat email pada akun Anda.</p>
<p><b>Email baru:</b> $new_email</p>
<p><b>Waktu:</b> " . date('d-m-Y H:i:s') . "</p>
<p><b>IP Address:</b> " . $_SERVER['REMOTE_ADDR'] . "</p>
<p>Jika Anda tidak melakukan perubahan ini, segera hubungi dukungan kami untuk mengamankan akun Anda.</p>
<hr>
<p style='font-size:12px;color:#777'>Pesan ini dikirim otomatis oleh sistem keamanan akun.</p>
";
$mail->send();
} catch (Exception $e) {
error_log("Gagal mengirim email: {$mail->ErrorInfo}");
}
}
?>
Keamanan Tambahan
Untuk meningkatkan keamanan, Anda bisa menambahkan:
-
Validasi email baru tidak sama dengan email lama.
-
Konfirmasi password sebelum ganti email.
-
Enkripsi token email change jika ingin membuat sistem approval email baru.
Kesimpulan
Fitur Email Change Alert adalah bagian kecil tapi krusial dari sistem keamanan akun. Dengan mengirim notifikasi ke email lama setiap kali ada perubahan, Anda membantu pengguna:
-
Tetap sadar jika akunnya diubah orang lain.
-
Segera mengambil tindakan jika terjadi pembobolan.
Langkah kecil ini bisa menyelamatkan reputasi dan kepercayaan pengguna terhadap aplikasi Anda.