Các kỹ thuật bảo mật trong PHP

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 28 tháng 2, 2025

Bài học này giúp học viên hiểu rõ và áp dụng các biện pháp bảo mật trong PHP, nhằm ngăn chặn các lỗ hổ như SQL Injection, XSS, và CSRF.

1. Các kỹ thuật bảo mật

1.1 Phòng chống SQL Injection với Prepared Statements

Tại sao SQL Injection nguy hiểm?

SQL Injection là lỗ hổ bảo mật cho phép kẻ tấn công chèn các câu lệnh SQL bất hợp pháp vào truy vấn của hệ thống.

Cách phòng chống SQL Injection

  • Sử dụng Prepared Statements trong MySQLi:
include 'config.php';
$username = $_POST['username'];
$password = $_POST['password'];

$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();
  • Sử dụng PDO:
include 'config.php';
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);

1.2 Bảo vệ ứng dụng khỏi XSS (Cross-Site Scripting)

XSS là gì?

XSS cho phép kẻ tấn công chèn mã JavaScript độc hại vào trang web, từ đó có thể đánh cắp cookie hoặc thao tác trái phép.

Cách phòng chống XSS

  • Dùng htmlspecialchars() khi hiển thị dữ liệu:
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
  • Loại bỏ thẻ HTML nguy hiểm bằng strip_tags():
echo strip_tags($user_input);

1.3 CSRF (Cross-Site Request Forgery) và cách phòng chống

CSRF là gì?

CSRF cho phép kẻ tấn công gửi yêu cầu đối với một trang web nhưng nhân danh là người dùng hợp pháp.

Cách phòng chống CSRF

  • Tạo token CSRF khi gửi form:
session_start();
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
  • Thêm token vào form:
<form method="POST">
    <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
    <button type="submit">Gửi</button>
</form>
  • Kiểm tra token khi nhận request:
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die("CSRF token không hợp lệ");
}

2. Kết luận

  • Cách bảo vệ cơ sở dữ liệu khỏi SQL Injection.
  • Phòng chống XSS và bảo vệ trang web khỏi JavaScript độc hại.
  • Cách ngăn chặn CSRF bằng cơ chế token.
Website Logo

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.

Bình luận

Website Logo

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.

Liên hệ công việc qua email dưới đây.

lhvuctu@gmail.com

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ