Vấn đề là: sanitize_text_field không sai, nhưng cách chúng ta dùng nó thì rất hay sai. Và sanitize sai còn nguy hiểm hơn là không sanitize.
sanitize_text_field thực sự làm gì?
Đúng như tên gọi, sanitize_text_field được thiết kế để:
- Làm sạch text ngắn
- Loại bỏ HTML, script, tag nguy hiểm
- Dùng cho dữ liệu kiểu: tên, tiêu đề ngắn, label, slug đơn giản
$title = sanitize_text_field( $_POST['title'] );
Đến đây thì không có gì sai. Sai bắt đầu từ lúc dev nghĩ rằng:
sanitize_text_field = hàm sanitize cho mọi loại dữ liệu
Sai lầm phổ biến: dùng sanitize_text_field cho mọi thứ
Rất nhiều code ngoài kia đang làm những việc kiểu thế này:
$content = sanitize_text_field( $_POST['content'] );
Hoặc tệ hơn:
$html = sanitize_text_field( $_POST['html'] );
Đây là sai hoàn toàn về mặt tư duy.
Vì sao lại sai?
sanitize_text_field sẽ:
- Xóa toàn bộ HTML
- Cắt xuống còn plain text
- Làm mất cấu trúc dữ liệu ban đầu
Nếu dữ liệu của bạn là:
<p>Hello <strong>world</strong></p>
Sau khi sanitize:
Hello world
HTML biến mất. Format biến mất. Ý đồ ban đầu của dữ liệu cũng biến mất.
Sanitize sai còn nguy hiểm hơn không sanitize
Nghe hơi ngược đời, nhưng đúng.
Khi sanitize sai:
- Dữ liệu bị biến dạng
- Dev khác không biết vì sao dữ liệu “mất chữ”, “mất format”
- Bạn tự tạo bug logic rất khó debug
Trong khi đó, không sanitize (nhưng escape đúng lúc) đôi khi còn an toàn và rõ ràng hơn.
sanitize_text_field dùng đúng khi nào?
Dùng sanitize_text_field khi dữ liệu thỏa mãn các điều kiện sau:
- Chỉ là text ngắn
- Không cần HTML
- Không cần xuống dòng
Ví dụ hợp lý:
- Tên người dùng
- Tiêu đề ngắn
- Search keyword
- Custom field dạng label
$keyword = sanitize_text_field( wp_unslash( $_GET['s'] ) );
Khi KHÔNG nên dùng sanitize_text_field?
Đừng dùng hàm này cho:
- Nội dung bài viết
- Textarea dài
- HTML markup
- JSON string
Đây không phải lỗi của WordPress. Đây là lỗi của dev dùng sai tool.
Tư duy đúng: Sanitize theo ngữ cảnh, không theo thói quen
Câu hỏi đúng không phải là:
“Dữ liệu này đã sanitize chưa?”
Mà là:
“Dữ liệu này là loại gì, và cần xử lý như thế nào?”
sanitize_text_field chỉ là một mảnh ghép nhỏ trong hệ thống sanitize / validate / escape của WordPress.
Kết luận
sanitize_text_fieldkhông phải thuốc trị bách bệnh- Dùng sai sẽ làm hỏng dữ liệu một cách âm thầm
- Chỉ dùng khi dữ liệu thực sự là text ngắn, không HTML
WordPress không thiếu hàm. Thứ thiếu là tư duy dùng hàm đúng chỗ.
Bình luận