Bộ lọc (Filter) PHP
- Trang trước PHP ngoại lệ
- Trang tiếp theo Giới thiệu MySQL
Bộ lọc PHP được sử dụng để xác thực và lọc dữ liệu từ nguồn không an toàn, chẳng hạn như đầu vào của người dùng.
PHP bộ lọc là gì?
Bộ lọc PHP được sử dụng để xác thực và lọc dữ liệu từ nguồn không an toàn.
Xác thực và lọc đầu vào của người dùng hoặc dữ liệu tùy chỉnh là một phần quan trọng của bất kỳ ứng dụng web nào.
Mục đích của việc thiết kế mở rộng bộ lọc PHP là để làm cho việc lọc dữ liệu dễ dàng và nhanh chóng hơn.
Tại sao lại sử dụng bộ lọc?
Hầu hết các ứng dụng web đều phụ thuộc vào đầu vào từ bên ngoài. Dữ liệu này thường đến từ người dùng hoặc các ứng dụng khác (như dịch vụ web). Bằng cách sử dụng bộ lọc, bạn có thể đảm bảo rằng ứng dụng nhận được loại đầu vào đúng.
Bạn nên luôn lọc dữ liệu外部!
Bộ lọc đầu vào là một trong những vấn đề an toàn ứng dụng quan trọng nhất.
Đ外部数据 là gì?
- Dữ liệu đầu vào từ biểu mẫu
- Cookies
- Biến biến số trên máy chủ
- Kết quả truy vấn cơ sở dữ liệu
Hàm và bộ lọc
Để lọc biến, hãy sử dụng một trong các hàm lọc sau:
- filter_var() - Lọc một biến duy nhất bằng bộ lọc cụ thể
- filter_var_array() - Lọc nhiều biến bằng cùng một hoặc khác bộ lọc
- filter_input - Lấy một biến đầu vào, và lọc nó
- filter_input_array - Lấy nhiều biến đầu vào, và lọc chúng bằng cùng một hoặc khác bộ lọc
Trong ví dụ dưới đây, chúng ta sử dụng hàm filter_var() để kiểm tra một số nguyên:
<?php $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("Số nguyên không hợp lệ"); } else { echo("Số nguyên là hợp lệ"); } ?>
Mã trên sử dụng bộ lọc FILTER_VALIDATE_INT để lọc biến. Do số nguyên này là hợp lệ, vì vậy kết quả đầu ra của mã là: "Số nguyên là hợp lệ".
Nếu chúng ta thử sử dụng một biến không phải số nguyên, thì kết quả đầu ra là: "Số nguyên không hợp lệ".
Để có danh sách đầy đủ các hàm và bộ lọc, hãy truy cập trang web của chúng ta Tài liệu tham khảo PHP Filter。
Validating và Sanitizing
Có hai bộ lọc:
Bộ lọc Validating:
- Để xác thực đầu vào của người dùng
- Quy tắc định dạng chặt chẽ (ví dụ: xác thực URL hoặc E-Mail)
- Nếu thành công thì trả về loại mong đợi, nếu thất bại thì trả về FALSE
Bộ lọc Sanitizing:
- Để cho phép hoặc cấm các ký tự cụ thể trong chuỗi
- Không có quy tắc định dạng dữ liệu
- Luôn trả về chuỗi
Các tùy chọn và dấu hiệu
Các tùy chọn và dấu hiệu được sử dụng để thêm các tùy chọn lọc bổ sung cho bộ lọc cụ thể.
Các bộ lọc khác nhau có các tùy chọn và dấu hiệu khác nhau.
Trong ví dụ dưới đây, chúng ta sử dụng filter_var() và tùy chọn "min_range" và "max_range" để kiểm tra một số nguyên:
<?php $var=300; $int_options = array( "options"=>array ( "min_range"=>0, "max_range"=>256 ) ); if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)) { echo("Số nguyên không hợp lệ"); } else { echo("Số nguyên là hợp lệ"); } ?>
Người dùng có thể thấy rằng các tùy chọn phải được đặt trong một mảng có tên là "options" nếu sử dụng dấu hiệu, thì không cần đặt trong mảng.
Do số nguyên là "300", nó không trong phạm vi được chỉ định, đầu ra của mã trên sẽ là "Số nguyên không hợp lệ".
Để có danh sách đầy đủ các hàm và bộ lọc, hãy truy cập vào CodeW3C.com do CodeW3C cung cấp Tài liệu tham khảo PHP FilterBạn có thể thấy các tùy chọn và dấu hiệu có sẵn của mỗi bộ lọc.
Xác minh đầu vào
Hãy thử xác minh đầu vào từ biểu mẫu.
Việc đầu tiên chúng ta cần làm là xác nhận rằng dữ liệu đầu vào mà chúng ta đang tìm kiếm có tồn tại không.
Sau đó chúng ta sử dụng hàm filter_input() để lọc dữ liệu đầu vào.
Trong ví dụ dưới đây, biến đầu vào "email" được truyền đến trang PHP:
<?php if(!filter_has_var(INPUT_GET, "email")) { echo("Loại đầu vào không tồn tại"); } else { if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "E-Mail không hợp lệ"; } else { echo "E-Mail là hợp lệ"; } } ?>
Giải thích ví dụ:
Trong ví dụ trên, có biến đầu vào (email) được truyền bằng phương thức "GET":
- Kiểm tra xem biến đầu vào "email" loại "GET" có tồn tại không
- Nếu biến đầu vào tồn tại, kiểm tra xem nó có phải là địa chỉ email hợp lệ không
Làm sạch đầu vào
Hãy thử làm sạch URL được truyền từ biểu mẫu.
Trước tiên, chúng ta cần xác nhận rằng dữ liệu đầu vào mà chúng ta đang tìm kiếm có tồn tại không.
Sau đó, chúng ta sử dụng hàm filter_input() để làm sạch dữ liệu đầu vào.
Trong ví dụ dưới đây, biến đầu vào "url" được truyền đến trang PHP:
<?php if(!filter_has_var(INPUT_POST, "url")) { echo("Loại đầu vào không tồn tại"); } else { $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL); } ?>
Giải thích ví dụ:
Trong ví dụ trên, có biến đầu vào (url) được truyền bằng phương thức "POST":
- Kiểm tra xem biến đầu vào "url" loại "POST" có tồn tại không
- Nếu biến đầu vào này tồn tại, hãy làm sạch nó (xóa ký tự bất hợp pháp) và lưu trữ trong biến $url
Giả sử biến đầu vào tương tự như sau: "http://www.W3非o法ol.com.c字符n/" thì biến $url sau khi làm sạch nên là như sau:
http://www.codew3c.com/
Lọc nhiều đầu vào
Mẫu đơn thường bao gồm nhiều trường đầu vào. Để tránh gọi lặp lại filter_var hoặc filter_input, chúng ta có thể sử dụng filter_var_array hoặc hàm filter_input_array.
Trong ví dụ này, chúng ta sử dụng hàm filter_input_array() để lọc ba biến GET. Biến GET nhận được là tên, độ tuổi và địa chỉ email:
<?php $filters = array ( "name" => array ( "filter"=>FILTER_SANITIZE_STRING ), "age" => array ( "filter"=>FILTER_VALIDATE_INT, "options"=>array ( "min_range"=>1, "max_range"=>120 ) ), "email"=> FILTER_VALIDATE_EMAIL, ); $result = filter_input_array(INPUT_GET, $filters); if (!$result["age"]) { echo("Độ tuổi phải là số từ 1 đến 120.<br />"); } elseif (!$result["email"]) { echo("Email không hợp lệ.<br />"); } else { echo("Đầu vào người dùng hợp lệ"); } ?>
Giải thích ví dụ:
Ví dụ trên có ba biến đầu vào được truyền bằng phương thức "GET" (tên, độ tuổi và email).
- Thiết lập một mảng chứa tên biến đầu vào và bộ lọc cho biến đầu vào cần thiết định.
- Gọi hàm filter_input_array(), tham số bao gồm biến đầu vào GET và mảng đã thiết lập.
- Kiểm tra biến $result có biến "age" và "email" có đầu vào không hợp lệ không. (Nếu có đầu vào không hợp lệ,)
Tham số thứ hai của hàm filter_input_array() có thể là một mảng hoặc ID của một bộ lọc đơn.
Nếu tham số là ID của một bộ lọc đơn, thì bộ lọc này sẽ lọc tất cả các giá trị trong mảng đầu vào.
Nếu tham số là một mảng, thì mảng đó phải tuân theo quy tắc sau:
- Phải là mảng liên quan, chứa các biến đầu vào là khóa của mảng (ví dụ: biến đầu vào "age"))
- Giá trị của mảng này phải là ID của bộ lọc hoặc là mảng quy định bộ lọc, dấu hiệu và tùy chọn
Sử dụng Filter Callback
Bằng cách sử dụng bộ lọc FILTER_CALLBACK, bạn có thể gọi hàm tùy chỉnh và sử dụng nó như một bộ lọc. Như vậy, chúng ta có quyền kiểm soát hoàn toàn việc lọc dữ liệu.
Bạn có thể tạo hàm tùy chỉnh của riêng mình hoặc sử dụng hàm PHP sẵn có.
Định nghĩa cách bạn muốn sử dụng hàm bộ lọc tương tự như cách bạn định nghĩa tùy chọn.
Trong ví dụ sau, chúng ta sử dụng một hàm tùy chỉnh để chuyển đổi tất cả "_" thành khoảng trống:
<?php function convertSpace($string) { return str_replace("_", " ", $string); } $string = "Peter_is_a_great_guy!"; echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace")); ?>
Kết quả của đoạn mã trên như sau:
Peter là một người tuyệt vời!
Giải thích ví dụ:
Ví dụ trên chuyển đổi tất cả "_" thành khoảng trống:
- Tạo một hàm thay thế "_" bằng khoảng trống
- Gọi hàm filter_var(), các tham số của nó là bộ lọc FILTER_CALLBACK và mảng chứa hàm của chúng ta
- Trang trước PHP ngoại lệ
- Trang tiếp theo Giới thiệu MySQL