bảo mật trong việc cho phép upload file!!! 2007-07-28 04:50:06
Mình cho phép user upload hình đại diện lên trang web. User lợi dụng lỗi bảo mật để upload file php có đuôi là gif. Trong file php đó có mã code shell để chiếm đoạt quyền quản lý file (có thể thêm/xóa/sửa file. Xin chỉ mình cách khắc phục gấp nha các bạn.
Tra loi 34 comment(s) 2007-07-28 04:50:06
m4trix_v2:http://www.muabanvechai.com 2007-07-28 08:49:12
bạn có thể vào đây để xem cách sử dụng file upload . File này rất hay..File type không phải là image thì nó sẽ tự động chuyển thành txt..bạn có thể tham khảo tại www.verot.net
Tra loi
TG 2007-07-28 11:29:30
Tra loi
pigbig_vn 2007-07-29 11:18:35
Tra loi
pigbig_vn 2007-07-29 12:33:15
Ko đc TG ơi. Do file PHP đã bị đổi đuôi lại thành đuôi .gif nên file .htaccess ko tác dụng. Help me !!!!
m4trix_v2Underline
m4trix_v2 ơi, bạn chỉ mình cụ thề địa chỉ hơn đi. Mình kiếm hoài trên địa chỉ http://www.verot.net/ mà vẫn ko thấy. hu hu.Giúp mình với.
ah, làm sao minh upload file đính kèm lên để cho các bạn xem thử file đó bi giờ??
Tra loi
BinhPham 2007-07-29 01:49:54
Tra loi
pigbig_vn 2007-07-29 07:50:05
Tra loi
m4trix_v2:http://www.muabanvechai.com 2007-07-29 08:28:54
has been released.
Neu thay thi click vào đó...đó là cái class.upload đó bạn à.
Thân
Tra loi
e-learning 2007-07-30 02:31:12
Tra loi
pigbig_vn 2007-07-30 09:14:32
Tra loi
TG 2007-07-31 09:03:42
chỉ có 1 cách, hơi mất thời gian nhưng đảm bảo nhất là bạn cứ cho upload file lên host, sau đó dùng hàm filetype($file) để kiểm tra định dạng, hàm filetype không kiểm tra dựa vào cấu trúc file do đó cho dù bạn đổi phần mở rộng
<?php
//upload $file lên 1 thư mục ẩn
$type = filetype($file);
if(substr($type,0,5)!='image') { print "không phải image";
@unlink($file); //xóa file đó di
}
?>
Tra loi
e-learning 2007-07-31 09:32:59
@pigbig_vn: bạn dùng hàm $_FILE['userfile']['type'] để lấy kiểu của file. Xong rồi thì kiểm tra với cái mảng kiểu file mà bạn cho phép upload lên.
Tra loi
TG 2007-07-31 11:24:25
Tra loi
e-learning 2007-07-31 11:28:57
Tra loi
Quan Tran Anh 2007-07-31 01:44:58
Tra loi
BinhPham 2007-07-31 03:04:23
$fileInfo = $_FILES['upload'];
$allowMime = array('image/jpeg', 'image/gif');
/**
* Check mime type
*/
if(!in_array($fileInfo['type'], $allowMime)){
die('Tập tin này không được chấp nhận');
}
// upload code here
[/php]
đây là check mime type
Tra loi
toiyeuphp 2007-07-31 03:06:47
Tra loi
TG 2007-07-31 03:20:24
- dùng htaccess
- cho upload len trước sau đó dùng filetype (đọc các thảo luận trong bài này)
- không cho người dùng link đường dẫn đến file image, mà dùng 1 file .php để hiển thị hình ảnh, nghĩa là hinh ảnh khi hiển thị sẽ có dạng: image.php?id=<id> như vậy thì mình sẽ control được các file upload lên.
- tạo file .zip, nghĩa là sẽ zip mọi tập tin được upload (và chỉ cho download)
Tra loi
e-learning 2007-07-31 03:55:25
Tra loi
TG 2007-07-31 05:19:01
TG thư trong trường hợp đơn giản nhất ấy chứ:
if($_POST) {
print_r($_FILES);exit();
}
?>
<form id="form1" name="form1" enctype="multipart/form-data" method="post" action="">
<input type="file" name="fileField" id="fileField" />
</form>
sau đó đổi 1 file .php nào đó thành .gif, submit nó cũng ra kết quả MIME type là image/gif :(
Tra loi
ahpdesigner@yahoo.com 2007-10-18 12:03:47
Mình đã test thử cái này với Class.php
việc dùng MimeType mình nghĩ là okie
Ko hiểu TG test kiểu gì chứ mình test thì hoàn toàn
"Kiểu file ko chop phep";
Tra loi
cb_dethuong 2007-11-16 01:17:26
Việc còn lạo thì phó thác cho quản trị server thôi
Vì nếu config đúng thì cho dù đổi đuôi cũng ko dùng được gì
http://mýite.com/phpinfo.gif
Sẽ xẽ xuất hiện
The image “http://mysite.com/phpinfo.gif” cannot be displayed, because it contains errors.
Cho dù trong khi upload ta có đổi thành phpinfo.php#hdfhd.gif thì nó vẫn bị đổi thành file gif
Còn 1 việc nữa khá đơn giản là bạn đổi tên file sau khi upload, như thế là an toàn
Tra loi
minhbu 2007-11-18 08:57:00
Tra loi
Quan Tran Anh 2007-11-19 09:20:50
Do đó, kiểm tra đuôi file, MIME type đều ko ăn thua.
Nhưng đoạn mã đấy chỉ thực hiện được trên server linux thì phải (nếu tớ ko nhầm), vì check với windows thấy ko ăn thua. Do đó, bạn chỉ cần chmod hợp lý thư mục chứa file upload là được (làm ơn, search google về vấn đề phân quyền thư mục trên linux đi).
Dạo gần đây chuyển qua xài Linux, thấy thích quá. Các bạn cũng chuyển qua Linux đê
Tra loi
babyblue 2007-12-08 02:50:32
Cách tốt nhất là bạn tránh include file qua biến lấy qua $_POST hoặc $_GET. Mình đã gặp rất nhiều trang dính cái này, nhất là ở những trang dùng multi templates hoặc multi languages.
Vì thực chất khi chạy file ảnh hoặc .txt đơn thuần thì mã PHP không thực thi được.
Tra loi
babyblue 2007-12-08 02:54:17
Bạn minhbu nói vậy là sai rồi, mình hỏi bạn khi bạn upload hình lên thì bạn có phải hiển thị nó không? hay up lên rồi cũng không biết nó nằm đâu.
Việc đổi tên file không khó, chỉ là để tránh trùng tên gây nên việc chéo đè file mới lên file cũ thôi.
ví dụ đổi tên như thế này có khó đoán không
$name=md5(time()*1984);
Nhưng có ai đi đoánc ái này bao giờ, nó sờ sờ ra trước mắt đoán làm gì :D
Tra loi
babyblue 2007-12-08 02:58:28
Việc còn lạo thì phó thác cho quản trị server thôi
Vì nếu config đúng thì cho dù đổi đuôi cũng ko dùng được gì
http://mýite.com/phpinfo.gif
Sẽ xẽ xuất hiện
Cho dù trong khi upload ta có đổi thành phpinfo.php#hdfhd.gif thì nó vẫn bị đổi thành file gif
Còn 1 việc nữa khá đơn giản là bạn đổi tên file sau khi upload, như thế là an toàn
Nếu thêm cái này trước
header('Content-Type: image/jpeg');
phpinfo();
thì sao bạn, thậm chí view ảnh vẫn thấy hình bình thường, hacker có thể dễ dàng tạo ra một file ảnh bằng mã PHP mà, mà cứ gì hacker các bạn vẫn làm tốt đó thôi
Tra loi
~Fyodor 2007-12-28 04:17:52
Tra loi
cocbay 2007-12-28 08:33:17
Tra loi
bosspro 2008-01-05 10:15:42
Tra loi
MusicRum 2008-01-28 02:16:48
Options -execCGI
Tra loi
mime_content_type (string $filename ) 2009-11-18 10:56:49
mime_content_type (string $filename ) hàm này tìm được trong php.net sao mình xài ko dc nhỉ? echo chẳng thấy gì cả. Trong khi examples của họ là:
<?php
echo mime_content_type('php.gif') . "\n";
echo mime_content_type('test.php');
?>
output:
image/gif
text/plain
Vậy là do server (localhost) của mình thiếu gì ah?
Tra loi
kenphan.info 2009-11-18 11:44:59
Returns the content type in MIME format, like text/plain or application/octet-stream.
Tra loi
123456 2009-11-19 11:14:41
Tra loi
choncon 2009-11-19 12:05:49
Tra loi
Y kien