[ PHP ] Module chống upload file thực thi (php, cgi,...)
Xin chào mọi người, để tiệp tục chuỗi bài về bảo mật PHP - MySql, mình xin giới thiệu module chống upload các loại file thực thi.
Bài 3: Module chống upload file thực thi
I. Mở đầu
Trên thực tế, các website chúng ta tạo ra hiện nay, chúng ta chỉ có thể giới hạn người dụng upload một số loại file nào đó như file ảnh, file nén, file lưu trữ văn bản,... và điều mà nhất thiết phải có chính là KHÔNG CHO UPLOAD FILE THỰC THI.
Nhìn chung, đối với các website bán hàng, website cá nhân hay các diễn đàn các admin thường hạn chế người dùng upload các file như php, asp, cgi,... còn với các trang chia sẻ file, các bạn cần nghiên cứu sâu hơn và mục tiêu của bài này không nhằm vào hướng đi sâu đó.
II. Giới thiệu code
Bài 3: Module chống upload file thực thi
I. Mở đầu
Trên thực tế, các website chúng ta tạo ra hiện nay, chúng ta chỉ có thể giới hạn người dụng upload một số loại file nào đó như file ảnh, file nén, file lưu trữ văn bản,... và điều mà nhất thiết phải có chính là KHÔNG CHO UPLOAD FILE THỰC THI.
Nhìn chung, đối với các website bán hàng, website cá nhân hay các diễn đàn các admin thường hạn chế người dùng upload các file như php, asp, cgi,... còn với các trang chia sẻ file, các bạn cần nghiên cứu sâu hơn và mục tiêu của bài này không nhằm vào hướng đi sâu đó.
II. Giới thiệu code
Mã nguồn PHP:
<?php
error_reporting(0); function getExtension($str) { $i = strrpos($str,"."); if (!$i) { return ""; } $l = strlen($str) - $i; $ext = substr($str,$i+1,$l); return $ext; }$allowedTypes = strtolower('jpg|jpge|gif|png|');$allowedTypes = explode('|',$allowedTypes); foreach($_FILES as $var => $value) { if (is_array($_FILES["$var"]["name"])) { foreach ($_FILES["$var"]["name"] as $key => $values) { $filename = $values; $extension=getExtension(strtolower($filename)); if (!in_array($extension, $allowedTypes)) { $_FILES["$var"]["name"][$key] = "YouCanNotUpLoadThisFileType"; $_FILES["$var"]["tmp_name"][$key] = "AccessDenied"; } } } else { $filename = $_FILES["$var"]["name"]; $extension=getExtension(strtolower($filename)); if (!in_array($extension, $allowedTypes)) { $_FILES["$var"]["name"] = "YouCanNotUpLoadThisFile"; $_FILES["$var"]["tmp_name"] = "AccessDenied"; } } } ?>
Giải thích:
Đơn giản là mình sẽ tạo ra một list các đuôi file hợp lệ (ở đây là một số file ảnh) jpg|jpge|gif|png| các bạn có thể thay đổi tùy thuộc vào nhu cầu.
Sau đó mình sẽ kiểm tra tên các file được upload, nếu file đó có đuôi không hợp lệ mình sẽ trả về tên là YouCanNotUpLoadThisFile
Ở đây có thể áp dụng cho cả upload 1 file hoặc upload nhiều file.
III. Sử dụng code
Các bạn lưu lại với tên "AntiUpShell.php" và chèn đoạn mã sau vào file kết nối tới CSDL hoặc file xử lý upload (phảiđể trong file xử lý upload nếu nó nằm riêng lẽ và chưa require file kết nối CSDL)
Mong mọi ngưới góp ý phát triển!
[ PHP ] Module chống upload file thực thi (php, cgi,...)
Reviewed by Nguyen Nam Hong
on
7:39 AM
Rating: