PHP – Filters

Validating data = Xác định xem dữ liệu có ở dạng thích hợp không.

Sanitizing data = Xóa bất kỳ ký tự không hợp lệ nào khỏi dữ liệu.

Filter Extension

filters dùng để xác thực và xử lý dữ liệu

filter extension có nhiều hàm giúp xác thực dữ liệu dễ dàng.

hàm filter_list() sẽ liệt kê các filter extension mà PHP cung cấp.

<table>
  <tr>
    <td>Filter Name</td>
    <td>Filter ID</td>
  </tr>
  <?php
  foreach (filter_list() as $id =>$filter) {
      echo '<tr><td>' . $filter . '</td><td>' . filter_id($filter) . '</td></tr>';
  }
  ?>
</table>

Tại sao sử dụng Filters?

Ứng dụng chúng ta có thể nhận dữ liệu bên ngoài như:

  • Form input
  • Cookies
  • Web services data
  • Server variables
  • Database query results

Bạn nên kiểm tra dữ liệu từ bên ngoài. Khi dữ liệu được submit nếu không kiểm tra có thể ảnh hưởng đến bảo mật. Dùng PHP filters để đảm bảo dữ liệu đúng khi nhận.

Hàm filter_var()

Hàm filter_var() được dùng cả validate và sanitize.

Hàm filter_var() có 2 tham số là biến và kểu filter

  • Biến bạn muốn check
  • type check bạn muốn dùng.

Sanitize một String

Ví dụ sau sử dụng hàm filter_var() để xóa tất cả các thẻ HTML khỏi một chuỗi:

<?php
$str = "<h1>Hello World!</h1>";
$newstr = filter_var($str, FILTER_SANITIZE_STRING);
echo $newstr;
?>

Validate một Integer

Ví dụ sau sử dụng hàm filter_var() để kiểm tra xem biến $int có phải là một số nguyên hay không. Nếu $int là một số nguyên, xuất ra “Integer is valid”. Nếu $int không phải là số nguyên, xuất ra “Integer is not valid”:

<?php
$int = 100;

if (!filter_var($int, FILTER_VALIDATE_INT) === false) {
    echo("Integer is valid");
} else {
    echo("Integer is not valid");
}
?>

filter_var() và vấn đề với 0

Trong ví dụ trên, nếu $int được set bằng 0, hàm ở trên sẽ trả về “Integer is not valid”. Để giải quyết vấn đề này, hãy sử dụng mã bên dưới:

<?php
$int = 0;

if (filter_var($int, FILTER_VALIDATE_INT) === 0 || !filter_var($int, FILTER_VALIDATE_INT) === false) {
    echo("Integer is valid");
} else {
    echo("Integer is not valid");
}
?>

Validate một IP Address

Ví dụ sau sử dụng hàm filter_var() để kiểm tra xem biến $ip có phải là địa chỉ IP hợp lệ không:

<?php
$ip = "127.0.0.1";

if (!filter_var($ip, FILTER_VALIDATE_IP) === false) {
    echo("$ip is a valid IP address");
} else {
    echo("$ip is not a valid IP address");
}
?>

Sanitize và Validate một Email Address

Ví dụ sau sử dụng hàm filter_var() để xóa tất cả các ký tự không hợp lệ khỏi biến $email, sau đó kiểm tra xem đó có phải là địa chỉ email hợp lệ không:

<?php
$email = "john.doe@example.com";

// Remove all illegal characters from email
$email = filter_var($email, FILTER_SANITIZE_EMAIL);

// Validate e-mail
if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
    echo("$email is a valid email address");
} else {
    echo("$email is not a valid email address");
}
?>

Sanitize và Validate một URL

Ví dụ sau sử dụng hàm filter_var() để xóa tất cả các ký tự không hợp lệ khỏi URL, sau đó kiểm tra xem $url có phải là URL hợp lệ không:

<?php
$url = "https://www.w3schools.com";

// Remove all illegal characters from a url
$url = filter_var($url, FILTER_SANITIZE_URL);

// Validate url
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
    echo("$url is a valid URL");
} else {
    echo("$url is not a valid URL");
}
?>