Chuẩn hóa dữ liệu đầu vào và ra trong WordPress

Chuẩn hóa dữ liệu đầu vào và ra trong WordPress

Dữ liệu đầu vào rất quan trọng đối với một website, nó có thể trở thành mối nguy hiểm đối với website của bạn nếu bạn không kiểm tra dữ liệu và chuẩn hóa  trước khi cho phép lưu trữ. Minh đã gặp trường hợp nhiều bạn nói rằng theme tự viết của bạn ấy kém an toàn và thường xuyên có dữ liệu lạ,… WordPress không phải là một CMS kém bảo mật, độ bảo mật của nó cũng xếp hạng tốt, tuy nhiên tốt đến đâu cũng là do cách dùng của người dùng và admin. Trong bài viết này mình sẽ chia sẻ với bạn cách để làm wordpress trở nên an toàn hơn bằng cách chuẩn hóa dữ liệu đầu vào.

Chuẩn hóa dữ liệu (sanitize) là gì?

Chuẩn hóa dữ liệu là quá trình làm “sạch” dữ liệu không liên quan đến loại cần chuẩn hóa. Ví dụ mình muốn chuẩn hóa một chuỗi ký tự nhập vào theo loại “Text” thì dữ liệu ban đầu có các mã HTML, Javascript,… sẽ được loại bỏ để cho ra một đoạn text chuẩn. Phương pháp chuẩn hóa không những giúp lưu trữ dữ liệu an toàn mà còn giúp tiết kiệm được dung lượng dư thừa do không phải lưu trữ nhiều ký tự không cần thiết.

Nếu dữ liệu ban đầu của bạn có quá nhiều và chưa được chuẩn hóa bạn có thể sử dụng phương pháp chuẩn hóa đầu ra (escape) để lấy dữ liệu ra an toàn mà không phá vỡ cấu trúc và hoạt động bình thường của website.

Dưới đây mình sẽ chia sẻ về cách sử dụng một số hàm chuẩn hóa đầu vào và ra của WordPress.

Các hàm chuẩn hóa dữ liệu đầu vào của WordPress

Mình thường sử dụng các hàm chuẩn hóa dữ liệu đầu vào khi thực hiện tạo Metabox, hoặc các form nhập liệu ở theme. Một số hàm thường dùng như sau:

  • sanitize_email($email): Hàm chuẩn hóa Email, với hàm này nó sẽ loại bỏ các ký tự ra hoặc ngoài cấu trúc của Email để lấy được một chuỗi Email hoàn chỉnh, ví dụ như sau:
<?php 
     $email = "admin@example.com!";  echo sanitize_email($email); 
     //Kết quả là admin@example.com.
?>
  • sanitize_file_name($name): Hàm chuẩn hóa tên file, thay thế khoảng trống thành dấu gạch ngan, loại bỏ các ký tự đặt biệt không được chấp nhận trong file. Ví dụ như sau:
<?php 
     $name = "ten file"; 
     echo sanitize_file_name($name); 
     //Kết quả là ten-file. 
?>
  • sanitize_html_class(): Hàm chuẩn hóa lớp html, hàm này có thể ít được dùng, ví dụ như sau:
<?php
     $post_class = sanitize_html_class( $post->post_title );
     echo '<div class="' . esc_attr( $post_class ) . '">';
?>
  • sanitize_key($key): Hàm lọc đưa ra chữ thường (không in hoa), số, gạch ngan và dấu gạch dưới, Ví dụ như sau:
<?php
     echo sanitize_key('Chào mừng bạn đến với WordPress 2018');
     //kết quả "chomngbnnviwordpress2018"
?>
  • sanitize_mime_type($mime_type): Hàm lọc tên của một tệp và đưa ra loại tên tệp phù hợp nhất, ví dụ:
<?php
     echo sanitize_mime_type('tep hinh anh.jpg');
     //Kết quả "tephinhanh.jpg"
?>
  • sanitize_text_field($str): Hàm giúp chuyển các ký tự “<“, loại bỏ các tab, khoản trống thừa và ngắt dòng.
<?php
     echo sanitize_text_field('<h1> Tieu đề bài viết </h1>');
     //Kết quả Tieu đề bài viết
?>
  • sanitize_title_for_query($title): Được sử dụng để truy vấn cơ sở dữ liệu cho một giá trị từ URL.
  • sanitize_title_with_dashes($title, $unused, $context = ‘display’): Giới hạn đầu ra thành các ký tự chữ và số, dấu gạch dưới (_) và dấu gạch ngang (-). Khoảng trắng trở thành dấu gạch ngang.
<?php
     echo sanitize_title_with_dashes("I'm in LOVE with WordPress!!!1");
     // Kết quả im-in-love-with-wordpress1
?>

và một số hàm khác bạn có thể tham khảo tại codex.wordpress.org.

Các hàm chuẩn hóa dữ liệu đầu ra của WordPress

Thật ra khi đã chuẩn hóa tốt đầu vào thì đầu ra không cần chuẩn hóa cũng được, thế nhưng đôi khi mọi thứ không thể suôn sẻ được nên chúng ta có thể sẽ có sai sót trong quá trình chuẩn hóa đầu vào. Vậy nên chuẩn hóa đầu ra cũng là một trong những cách làm được khuyến khích để giữ giao diện được an toàn hơn. Dưới đây là một số hàm chuẩn hóa dữ liệu đầu ra cơ bản trong WordPress.

  • esc_html(): Sử dụng hàm này để chuẩn hóa HTML trước khi hiển thị ra bên ngoài.
<?php
   echo esc_html($title);
?>
  • esc_url(): Sử dụng hàm này trước khi in ra một URL cho các thuộc tính src hay href cho các thẻ HTML.
<?php
   echo esc_url( $img_url );
?>
  • esc_js(): Sử dụng để chuẩn hóa mã các đoạn mã javascript.
<a href="#" onclick="<?php echo esc_js( $custom_js ); ?>">Click me</a>
  • esc_attr(): Hãy sử dụng hàm này trước khi bạn in ra bất kỳ một thứ gì đó vào các thuộc tính của thẻ HTML.
<div class="<?php echo esc_attr( $extra_ul_class ); ?>">
  • esc_textarea(): Giúp bạn mã hóa các đoạn văn bản trước khi nó được hiển thị trong thẻ textarea.
<textarea><?php echo esc_textarea( $content ); ?></textarea>