GET và POST là hai phương thức của form được sử dụng để gửi dữ liệu của người dùng lên server khi phát triển các ứng dụng web. Trong bài viết này sẽ phân biệt sự khác biệt giữa hai phương thức và ví dụ cơ bản giúp bạn xây dựng ứng dụng web tối ưu và bảo mật hơn.

Trong PHP, hai biến toàn cục $_GET$_POST được sử dụng để lấy dữ liệu từ form.

  • $_GET lấy dữ liệu thông qua URL, thường dùng cho các yêu cầu tìm kiếm hoặc truy vấn.
  • $_POST lấy dữ liệu qua HTTP request body, thường dùng để gửi thông tin bảo mật hoặc dữ liệu lớn hơn.

1. Sự khác biệt giữa GET và POST

  • GET: Dữ liệu được gửi qua URL, tức là dữ liệu sẽ xuất hiện trong thanh địa chỉ của trình duyệt. Các tham số được gắn vào URL dưới dạng cặp key=value và phân cách nhau bởi dấu &. Phương thức này phù hợp cho các yêu cầu tìm kiếm hoặc truy vấn dữ liệu mà không yêu cầu bảo mật cao. Ví dụ: https://toicoding.com?s=php
  • POST: Dữ liệu được gửi qua HTTP request body và không hiển thị trong URL. Phương thức này được sử dụng khi cần truyền dữ liệu nhạy cảm như mật khẩu, thông tin cá nhân. POST bảo mật hơn và cho phép gửi lượng dữ liệu lớn hơn GET.

2. Ví dụ về xử lý form với GET và POST

Ví dụ sử dụng GET:

<form method="GET" action="search.php">
  <label for="search">Tìm kiếm:</label>
  <input type="text" id="search" name="search">
  <input type="submit" value="Tìm">
</form>

// search.php

$search = $_GET['search'];
echo "Kết quả tìm kiếm cho: " . htmlspecialchars($search);

Ví dụ sử dụng POST:

<form method="POST" action="register.php">
  <label for="username">Tên người dùng:</label>
  <input type="text" id="username" name="username">
  <label for="password">Mật khẩu:</label>
  <input type="password" id="password" name="password">
  <input type="submit" value="Đăng ký">
</form>

// register.php

$username = $_POST['username'];
$password = $_POST['password'];

// Giả sử chúng ta đã mã hóa mật khẩu trước khi lưu vào cơ sở dữ liệu
$hashed_password = password_hash($password, PASSWORD_BCRYPT);

echo "Tài khoản của bạn đã được đăng ký với tên: " . htmlspecialchars($username);

3. Bảo mật khi xử lý form

Một số vấn đề bảo mật cần lưu ý khi làm việc với dữ liệu GET và POST:

  • Xác thực dữ liệu người dùng: Không tin tưởng hoàn toàn vào dữ liệu từ người dùng, hãy luôn kiểm tra và xác thực dữ liệu đầu vào.

Ví dụ, kiểm tra dữ liệu nhập là email hợp lệ:

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
  echo "Email hợp lệ.";
} else {
  echo "Email không hợp lệ!";
}
  • Ngăn ngừa tấn công XSS (Cross-Site Scripting): Đảm bảo dữ liệu xuất ra trình duyệt được mã hóa an toàn, tránh chèn mã độc.
echo htmlspecialchars($name);
  • Ngăn ngừa tấn công CSRF (Cross-Site Request Forgery): Sử dụng token CSRF để bảo vệ form khỏi các yêu cầu giả mạo từ bên ngoài.

4. Lựa chọn phương thức nào phù hợp?

  • Sử dụng GET khi bạn cần gửi dữ liệu không nhạy cảm và muốn dữ liệu được hiển thị trong URL.
  • Sử dụng POST khi bạn cần gửi dữ liệu nhạy cảm, dữ liệu lớn hoặc khi không muốn hiển thị dữ liệu trong URL.

Hiểu rõ sự khác biệt giữa hai phương thức này sẽ giúp bạn xây dựng ứng dụng web vừa tối ưu về hiệu suất, vừa an toàn về bảo mật. Trong các bài viết tiếp theo, chúng ta sẽ tiếp tục tìm hiểu thêm về session, cookie và kết nối với cơ sở dữ liệu MySQL, giúp bạn phát triển một ứng dụng web đầy đủ chức năng.


Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *