Phòng chống XSS (Cross-site Scripting) bằng PHP
Hướng dẫn cách phòng chống XSS (Cross-site Scripting) trong PHP bằng cách lọc và thoát các đầu vào người dùng, nhằm bảo mật trang web trước các lỗ hổng XSS.
<?php
// Hàm thoát ký tự để ngăn chặn XSS
function escapeXSS($data) {
return htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
}
// Ví dụ xử lý dữ liệu đầu vào từ người dùng
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Lấy dữ liệu từ form
$user_input = $_POST['user_input'];
// Thoát các ký tự đặc biệt để ngăn chặn XSS
$safe_input = escapeXSS($user_input);
// Hiển thị dữ liệu an toàn
echo "Dữ liệu đã được thoát: " . $safe_input;
}
?>
<!-- Form nhập liệu từ người dùng -->
<form method="POST">
<label for="user_input">Nhập nội dung:</label>
<input type="text" id="user_input" name="user_input">
<input type="submit" value="Gửi">
</form>
Giải thích chi tiết:
-
Hàm
escapeXSS()
:- Sử dụng hàm
htmlspecialchars()
để thoát các ký tự đặc biệt như&
,<
,>
,"
và'
. Điều này giúp ngăn chặn việc thực thi mã độc XSS khi dữ liệu được hiển thị trên trình duyệt. - Tham số
ENT_QUOTES
giúp thoát cả dấu nháy đơn ('
) và dấu nháy kép ("
), vàUTF-8
được chỉ định là mã hóa ký tự.
- Sử dụng hàm
-
Xử lý dữ liệu người dùng:
- Khi người dùng nhập liệu vào form và gửi dữ liệu, dữ liệu sẽ được lấy từ
$_POST['user_input']
. - Dữ liệu này sau đó được thoát bằng hàm
escapeXSS()
trước khi được hiển thị lên trình duyệt, nhằm đảm bảo không có mã độc nào được thực thi.
- Khi người dùng nhập liệu vào form và gửi dữ liệu, dữ liệu sẽ được lấy từ
-
Form nhập liệu:
- Form HTML cho phép người dùng nhập nội dung và gửi nó bằng phương thức POST. Sau khi xử lý, dữ liệu sẽ được hiển thị an toàn mà không gây ra lỗ hổng XSS.
Phiên bản PHP:
Mã này có thể chạy trên mọi phiên bản PHP từ 5.0 trở lên.