wp_unslash() – Hàm WordPress gần như ai cũng dùng, và rất hay dùng sai

wp_unslash là một trong những hàm khiến nhiều developer WordPress “dùng theo phản xạ” hơn là dùng bằng tư duy. Thấy $_POST, $_GET, $_REQUEST là quăng wp_unslash() vào, cảm giác như đang làm đúng chuẩn WordPress.

wp_unslash() – Hàm WordPress gần như ai cũng dùng, và rất hay dùng sai

Vấn đề là: wp_unslash không sai, nhưng nó chỉ đúng trong đúng ngữ cảnh. Dùng sai ngữ cảnh, bạn sẽ tạo ra bug âm thầm, rất khó lần.

wp_unslash thực sự sinh ra để làm gì?

Muốn hiểu đúng wp_unslash, phải quay lại gốc vấn đề: magic quotes.

WordPress có cơ chế tự động thêm dấu \ (slash) vào dữ liệu request để tránh lỗi và đảm bảo an toàn khi xử lý input. Vì vậy, dữ liệu trong:

  • $_POST
  • $_GET
  • $_REQUEST

thường đã bị slash sẵn.

wp_unslash được tạo ra với mục đích rất rõ ràng:

Gỡ slash khỏi dữ liệu đầu vào trước khi xử lý tiếp.

$value = wp_unslash( $_POST['field'] );

Sai lầm phổ biến #1: wp_unslash mọi nơi, mọi lúc

Rất nhiều code ngoài kia trông như thế này:

$value = wp_unslash( get_post_meta( $post_id, 'meta_key', true ) );

Sai.

get_post_meta trả về dữ liệu đã được WordPress xử lý và lưu trong database. Nó không phải dữ liệu request. Không có lý do gì để unslash ở đây cả.

Dùng wp_unslash cho dữ liệu không bị slash sẽ:

  • Làm mất dấu \ hợp lệ
  • Biến dữ liệu ban đầu thành dữ liệu khác
  • Tạo bug logic rất khó phát hiện

Sai lầm phổ biến #2: Unsplash rồi… để đó

Một pattern cực kỳ phổ biến:

$value = wp_unslash( $_POST['value'] );

Và hết. Không sanitize. Không validate. Không escape.

wp_unslash KHÔNG phải sanitize. Nó chỉ đơn giản là:

  • Gỡ dấu \
  • Không lọc nội dung
  • Không bảo vệ XSS

Nhiều dev vô thức coi wp_unslash là một phần của “xử lý an toàn”, trong khi thực tế nó chỉ là bước tiền xử lý.

Sai lầm phổ biến #3: wp_unslash + sanitize sai thứ tự

Thứ tự xử lý dữ liệu rất quan trọng.

Sai:

$value = wp_unslash( sanitize_text_field( $_POST['value'] ) );

Ở đây, bạn sanitize trên dữ liệu đã bị slash → kết quả sanitize có thể không đúng như mong đợi.

Đúng:

$value = sanitize_text_field( wp_unslash( $_POST['value'] ) );

Luôn unslash trước, rồi mới sanitize.

wp_unslash dùng đúng khi nào?

Chỉ dùng wp_unslash khi dữ liệu đến từ:

  • $_POST
  • $_GET
  • $_REQUEST

chỉ trước khi bạn xử lý dữ liệu đó.

Ví dụ hợp lý:

$keyword = sanitize_text_field(
  wp_unslash( $_GET['s'] )
);

Hoặc:

$content = wp_kses_post(
  wp_unslash( $_POST['content'] )
);

Khi KHÔNG nên dùng wp_unslash?

Đừng dùng wp_unslash cho:

  • Dữ liệu lấy từ database
  • Dữ liệu trả về từ API nội bộ WordPress
  • Dữ liệu bạn tự tạo trong code

Nếu không chắc dữ liệu có bị slash hay không, khả năng cao là không nên unslash.

Tư duy đúng: wp_unslash không phải “bước bắt buộc”

wp_unslash không phải thứ bạn thêm vào cho “đủ bài”. Nó chỉ tồn tại vì WordPress xử lý request theo cách riêng.

Câu hỏi đúng cần tự hỏi là:

Dữ liệu này có đến trực tiếp từ request không?

Nếu câu trả lời là không, thì rất có thể bạn không cần wp_unslash ở đó.

Kết luận

  • wp_unslash chỉ dùng cho dữ liệu request
  • Không phải sanitize, không phải bảo mật
  • Dùng sai sẽ làm biến dạng dữ liệu một cách âm thầm

WordPress không khó. Thứ làm nó khó là thói quen copy-paste mà không hiểu bản chất.

Bình luận


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...