Xác thực email và URL trong các biểu mẫu (forms) là một phần quan trọng của việc xây dựng ứng dụng web an toàn và ổn định. Trong PHP, chúng ta có thể sử dụng các công cụ tích hợp sẵn để kiểm tra tính hợp lệ của các trường dữ liệu, bao gồm email và URL, giúp bảo vệ ứng dụng khỏi các cuộc tấn công bảo mật và đảm bảo dữ liệu đầu vào của người dùng chính xác. Bài viết này sẽ hướng dẫn cách xác thực email và URL trong PHP.
1. Tại sao cần validate e-mail và URL?
Việc validate email và URL trong PHP rất cần thiết vì:
- Đảm bảo tính chính xác của dữ liệu: Một địa chỉ email hoặc URL hợp lệ sẽ có định dạng cụ thể, và hệ thống chỉ xử lý đúng khi nhận được thông tin đúng định dạng.
- Bảo mật: Các cuộc tấn công như SQL Injection và XSS có thể xuất phát từ dữ liệu đầu vào không hợp lệ. Việc validate email và URL giúp ngăn chặn các cuộc tấn công này.
- Cải thiện trải nghiệm người dùng: Khi người dùng nhập sai định dạng, họ có thể nhận được thông báo lỗi và sửa lỗi ngay lập tức, giúp quá trình tương tác trở nên dễ dàng hơn.
2. Cách validate e-mail trong PHP
Trong PHP, chúng ta có thể sử dụng hàm filter_var() để xác thực một địa chỉ email hợp lệ. Đây là một phương thức đơn giản và an toàn để kiểm tra định dạng email.
a. Sử dụng filter_var() để kiểm tra email
<?php
$emailErr = "";
$email = "";
// Kiểm tra khi form được submit
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["email"])) {
$emailErr = "Email là bắt buộc.";
} else {
$email = test_input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Email không hợp lệ.";
}
}
}
// Hàm làm sạch dữ liệu
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>b. Giải thích
filter_var(): Đây là hàm chuẩn của PHP dùng để kiểm tra và lọc dữ liệu đầu vào. Với bộ lọcFILTER_VALIDATE_EMAIL, hàm sẽ trả vềtruenếu email hợp lệ vàfalsenếu không hợp lệ.test_input(): Làm sạch dữ liệu trước khi xác thực bằng cách loại bỏ các khoảng trắng dư thừa, dấu gạch chéo ngược và mã hóa các ký tự đặc biệt để tránh tấn công XSS.
3. Cách validate URL trong PHP
Tương tự như email, chúng ta cũng có thể sử dụng filter_var() để kiểm tra tính hợp lệ của một URL.
a. Sử dụng filter_var() để kiểm tra URL
<?php
$websiteErr = "";
$website = "";
// Kiểm tra khi form được submit
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["website"])) {
$websiteErr = "URL là bắt buộc.";
} else {
$website = test_input($_POST["website"]);
if (!filter_var($website, FILTER_VALIDATE_URL)) {
$websiteErr = "URL không hợp lệ.";
}
}
}
?>b. Giải thích
filter_var($website, FILTER_VALIDATE_URL): Hàm này kiểm tra xem chuỗi có phải là URL hợp lệ hay không. Nếu URL không đúng định dạng, hàm sẽ trả vềfalse.- Hàm
test_input()giúp làm sạch chuỗi đầu vào, loại bỏ các ký tự không cần thiết và bảo vệ khỏi các cuộc tấn công bảo mật.
4. Ví dụ hoàn chỉnh về form validate e-mail và URL
Dưới đây là một ví dụ hoàn chỉnh về biểu mẫu PHP với hai trường nhập liệu: Email và URL. Cả hai đều được xác thực bằng cách sử dụng filter_var().
a. HTML form
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Email: <input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span><br><br>
Website: <input type="text" name="website">
<span class="error"><?php echo $websiteErr;?></span><br><br>
<input type="submit" name="submit" value="Gửi">
</form>b. Xử lý PHP
<?php
$emailErr = $websiteErr = "";
$email = $website = "";
// Kiểm tra khi form được submit
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Kiểm tra email
if (empty($_POST["email"])) {
$emailErr = "Email là bắt buộc.";
} else {
$email = test_input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Email không hợp lệ.";
}
}
// Kiểm tra URL
if (empty($_POST["website"])) {
$websiteErr = "URL là bắt buộc.";
} else {
$website = test_input($_POST["website"]);
if (!filter_var($website, FILTER_VALIDATE_URL)) {
$websiteErr = "URL không hợp lệ.";
}
}
}
// Hàm làm sạch dữ liệu đầu vào
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>5. Kết hợp validate e-mail và URL với client-side validation
Trong thực tế, việc xác thực phía server là bắt buộc, nhưng bạn cũng có thể sử dụng client-side validation bằng HTML5 để cải thiện trải nghiệm người dùng. Điều này giúp thông báo lỗi ngay khi người dùng nhập sai, tránh gửi biểu mẫu không hợp lệ đến server.
Ví dụ về form HTML5 với client-side validation:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Email: <input type="email" name="email" required>
<span class="error">* <?php echo $emailErr;?></span><br><br>
Website: <input type="url" name="website" required>
<span class="error"><?php echo $websiteErr;?></span><br><br>
<input type="submit" name="submit" value="Gửi">
</form>HTML5 hỗ trợ thuộc tính type="email" và type="url" để xác thực email và URL trực tiếp từ trình duyệt, giúp cải thiện tính linh hoạt và nhanh chóng của quá trình nhập liệu.
Kết luận
Việc validate email và URL trong PHP là một bước quan trọng để đảm bảo tính hợp lệ và an toàn của dữ liệu nhập vào từ người dùng. Sử dụng các hàm tích hợp sẵn như filter_var() không chỉ giúp giảm thiểu lỗi mà còn bảo vệ ứng dụng khỏi các mối đe dọa bảo mật. Đồng thời, kết hợp với client-side validation có thể giúp nâng cao trải nghiệm người dùng.
Tác giả: CodeTutHub Team
Bài viết được đăng tải trên codetuthub.com trong series "Ngôn ngữ lập trình PHP".








