Phát triển trang web với PHP đòi hỏi phải tính đến một số cân nhắc. Tại một thời điểm nào đó, nhà phát triển PHP sẽ xử lý dữ liệu do khách truy cập trang web nhập vào. Dữ liệu thường được gửi đến trang web bằng HTTP POST, ví dụ từ biểu mẫu HTML. Vì một trang web có thể được truy cập bởi hàng tỷ người trên khắp Thế giới, rất có thể ai đó sẽ nhập nhầm dữ liệu có định dạng sai hoặc ai đó sẽ thử và nhập dữ liệu có thể gây ra sự cố cho ứng dụng PHP trên máy chủ web. Do đó, nói chung nên kiểm tra dữ liệu đầu vào để nó khớp với định dạng mà ứng dụng PHP có thể sử dụng chính xác
Trong bài viết này, một cái nhìn ngắn gọn về dọn dẹp dữ liệu cho PHP được thảo luận. Dọn dẹp dữ liệu đầu vào được gọi là thực hiện dọn dẹp dữ liệu, không chỉ được sử dụng để đảm bảo dữ liệu có định dạng chính xác để xử lý mà còn được sử dụng để ngăn chặn các kỹ thuật chèn mã, ví dụ như cross-site scripting [XSS] hoặc SQL injection. Để thực hành mã trong bài viết này, bạn sẽ cần truy cập vào máy chủ web chạy PHP, hầu hết các gói lưu trữ trang web đơn giản đều hỗ trợ PHP. Ngoài ra, hãy chạy máy chủ web trên máy tính của bạn [ví dụ: chạy PHP trên Windows]
Ghi chú. Nếu mã trong bài viết này đã được kiểm tra trên một trang web đang hoạt động, thì hãy xóa mã đó sau khi quá trình kiểm tra kết thúc. Nó cần thêm mã để bảo vệ khỏi bị lạm dụng, ví dụ như một số hình thức kiểm tra chống bot, chẳng hạn như CAPTCHA. Xem bài viết Tek Eye Mã reCAPTCHA để tải xuống để giới thiệu và thử nghiệm để biết ví dụ về việc triển khai reCAPTCHA của Google
Bắt đầu với một biểu mẫu HTML đơn giản
Để thực hành vệ sinh dữ liệu PHP, hãy bắt đầu với một ví dụ đơn giản về PHP xử lý một số dữ liệu. Trong bài viết của Tek Eye Biểu mẫu liên hệ HTML đơn giản cho trang web dựa trên PHP, dữ liệu từ trường tên và thông báo được gửi đến máy chủ web để PHP xử lý
Mã trình xử lý biểu mẫu PHP cho ví dụ trên chỉ gửi lại một trang web có dữ liệu đã nhập
HTML Form Demo
Processing feedback...
Dễ dàng chuyển dữ liệu qua chức năng dọn dẹp trước khi xử lý. Đoạn mã dưới đây cho thấy một chức năng để loại bỏ khoảng trắng không cần thiết, hữu ích trước khi lưu trữ dữ liệu trong trường cơ sở dữ liệu
/* Clean up any data */
function clean_data[$data] {
/* trim whitespace */
$data = trim[$data];
return $data;
}
$message=clean_data[$_POST['message']];
/* save data to database */
Sau đó, mã làm sạch dữ liệu bổ sung có thể được thêm vào chức năng clean_data[]
khi được yêu cầu. Ví dụ: ai đó có thể thử và gửi mã độc hại đến một trang web thông qua hộp nhập liệu [đây là bản trình diễn đơn giản để minh họa điểm này]
Thêm một lệnh gọi tới htmlspecialchars[]
trong hàm clean_data[]
sẽ dừng ví dụ đó
Đây là mã đầy đủ cho ví dụ trên
HTML Form Demo
Processing feedback...
Các hàm PHP khác có thể được sử dụng trên dữ liệu đầu vào, ví dụ như dải gạch chéo [] hoặc dấu gạch chéo bổ sung [] để bỏ trích dẫn hoặc trích dẫn một chuỗi. Mã khử trùng dữ liệu được thêm vào ứng dụng PHP sẽ dành riêng cho mục đích sử dụng dữ liệu đầu vào. Hãy nhớ xem xét cách dữ liệu sẽ được sử dụng để xác định việc làm sạch dữ liệu và kiểm tra dữ liệu cần được áp dụng. Ví dụ: lưu trữ tên tệp đầu vào vào trường cơ sở dữ liệu, bạn có cần đảm bảo rằng không có đường dẫn thư mục không. Ai đó có thể đang cố thao túng ứng dụng bằng các đường dẫn tương đối trong tên tệp
Sử dụng Bộ lọc PHP để Vệ sinh và Xác thực Dữ liệu
PHP đi kèm với các chức năng bộ lọc tích hợp để giúp dọn dẹp và kiểm tra các loại dữ liệu khác nhau. Sử dụng filter_var[] với cờ bộ lọc được chỉ định để khử trùng và xác thực đầu vào. Các loại dữ liệu được hỗ trợ bao gồm
- Chuỗi không được trích dẫn
- Số và Booleans
- Tên miền và URL
- Địa chỉ IP và MAC
- Biểu thức chính quy
- ASCII có thể in
Xem bộ lọc xác thực khi kiểm tra dữ liệu và bộ lọc làm sạch khi dọn dẹp dữ liệu.
/* Clean up any data */
function clean_data[$data] {
/* trim whitespace */
$data = trim[$data];
return $data;
}
$message=clean_data[$_POST['message']];
/* save data to database */
1 hỗ trợ các tùy chọn xác thực và xác thực dữ liệu khác nhau thông qua các cờ bộ lọc. Có thể triển khai bộ lọc tùy chỉnh thông qua gọi lạiGhi chú.
/* Clean up any data */
function clean_data[$data] {
/* trim whitespace */
$data = trim[$data];
return $data;
}
$message=clean_data[$_POST['message']];
/* save data to database */
1 không hoàn hảo và có thể không hoạt động đối với một số văn bản đầu vào và ngôn ngữ nước ngoài lạ, nhưng hợp lệ. Xem các bình luận trong PHP khác nhau. trang tài liệu mạngVí dụ về bộ lọc PHP xác thực đơn giản
Ví dụ PHP POST đơn giản ở trên được mở rộng để xem địa chỉ email có được nhập vào trường tên hay không. Đây là mã để kiểm tra địa chỉ email bằng PHP
/* Clean up any data */
function clean_data[$data] {
/* trim whitespace */
$data = trim[$data];
return $data;
}
$message=clean_data[$_POST['message']];
/* save data to database */
1if [!filter_var[$_POST['name'], FILTER_VALIDATE_EMAIL] === FALSE]
echo["You entered an email address for your name"];
Ghi chú. Trong tài liệu PHP cho
/* Clean up any data */
function clean_data[$data] {
/* trim whitespace */
$data = trim[$data];
return $data;
}
$message=clean_data[$_POST['message']];
/* save data to database */
1, nó nói rằng 'Trả về dữ liệu đã lọc hoặc SAI nếu bộ lọc bị lỗi. ' Do đó, việc sử dụng so sánh giống hệt /* Clean up any data */
function clean_data[$data] {
/* trim whitespace */
$data = trim[$data];
return $data;
}
$message=clean_data[$_POST['message']];
/* save data to database */
2, vì ________ 13 sẽ chỉ trả về _______ 14 hoặc dữ liệu được truyền vào [một chuỗi]. Đây là trình xử lý dữ liệu PHP được cập nhật đầy đủ
HTML Form Demo
Processing feedback...
Đọc tài liệu PHP về các bộ lọc PHP, đặc biệt là các nhận xét về tài liệu này, vì chúng bao gồm các chi tiết khác về hành vi của bộ lọc PHP