Form & Validate
Hướng tiếp cận (sử dụng JavaScript + PHP)
Mục tiêu: Xây dựng form có chức năng validate phía client (JavaScript) và xử lý gửi mail bảo mật bằng PHPMailer (SMTP).
Tài nguyên
Cấu trúc source
/form-training/
│
├── index.php
├── confirm.php
├── thanks.php
├── sendmail.php
├── /assets/
│ ├── style.css
│ └── validate.js
└── /vendor/
Luồng hoạt động
index.php → (validate.js) → confirm.php → sendmail.php → thanks.php
Yêu cầu thực hiện
- Xây dựng giao diện form trong
index.phptheo thiết kế mẫu - Cài đặt thư viện PHPMailer thông qua Composer
- Tìm hiểu về chức năng của form action, form method
- Submit form bằng method POST (tuyệt đối không dùng GET)
- Xây dựng validate bằng JavaScript (kiểm tra trước khi gửi form)
- Nếu validate hợp lệ, chuyển hướng sang
confirm.phphiển thị lại toàn bộ thông tin người dùng đã nhập (Tự xây dựng layout confirm) - Tại trang confirm.php, khi người dùng xác nhận gửi, thực hiện xử lý gửi mail qua
sendmail.php - Nếu gửi mail thành công, chuyển hướng tới
thanks.php - Nếu gửi mail thất bại, giữ nguyên dữ liệu đã nhập (không xóa form), thông báo lỗi.
- Cài đặt SMTP cho PHPMailer để gửi mail bằng tài khoản thật
- Kiểm tra nội dung email gửi đi đảm bảo đầy đủ tất cả các trường dữ liệu của form
Thiết lập bảo mật
1. CSRF Token
Sinh và kiểm tra token để ngăn chặn các request giả mạo (Cross-Site Request Forgery).
2. Server-side validation
Kiểm tra lại toàn bộ dữ liệu bằng PHP tại confirm.php trước khi gửi mail (phòng trường hợp người dùng bỏ qua JavaScript).
3. Honeypot Field
Thêm một trường ẩn (invisible input) để phát hiện bot tự động gửi form.
4. Time Trap
Ghi nhận thời gian bắt đầu nhập form, từ đó xác định người gửi có hợp lệ (tránh bot gửi quá nhanh).
5. Escape và Encode dữ liệu đầu ra
Mọi dữ liệu người dùng hiển thị ra HTML (ở confirm.php, thanks.php, email, v.v.) phải được xử lý bằng htmlspecialchars().
6. Cài đặt ReCaptcha
Tích hợp Google reCAPTCHA để ngăn bot tự động gửi form.