برای آپلود فایل در زبان php از کد زیر استفاده می شود :
move_uploaded_file ( file , new location ) ;
اما این کار نیاز به ایمن سازی دارد در غیر اینصورت حفره بسیار مناسبی برای نفوذ به سایت خود ایجاد کرده ایم.
برای ایجاد امنیت در آپلود و اینکه تنها فایل های مورد نظر توسط آپلودر ما پذیرفته شوند توضیحات زیر بسیار تاثیر گذار خواهد بود :
1- در ابتدا نوع فایل های مجاز را درون یک آرایه قرار می دهیم:
$allowed_ext = array ( 'jpg' , 'png' , 'gif' );
2- نام فایل را از ورودی دریافت می کنیم:
$file_name= $_FILES ['file'] ['name'];
3- تشخیص نوع فایل ورودی:
$file_ext = strtolower ( end ( explode('.' , $file_name) ) );
()explode : اجزای یک رشته را توسط یک کاراکتر که برای آن مشخص می شود تفکیک می کند.
()end : آخرین عنصر یک آرایه را بدست می آورد.
()strtoliwer : حروف بزرگ را به حروف کوچک تبدیل میکند.
4- مطابقت فایل ورودی با نوع فایل های مجاز برای آپلود :
if(in_array ( $file_ext , $allowed_ext ) === false ){
echo " this file is not allowed ";
}
5- تعیین آدرس برای آپلود:
$path= getcwd() , DIRECTORY_SEPARATOR . "مقصد ارسال فایل" ;
()getcwd : مسیر جاری فایل را بدست می آورد.
DIRECTORY_SEPARATOR : جدا کننده مسیر از مبدا به مقصد
برای فهم بهتر این نوشته به قطعه کد زیر دقت کنید.
$allowed_ext = array ( 'jpg' , 'png' , 'gif' );
$file_name = $_FILES ['file'] ['name'];
$file_ext= strtolower ( end ( explode('.' , $file_name)));
$file_tmp = $_FILES ['file'] ['tmp_name'];
$typefile = $_FILES ['file'] ['type'];
$path= getcwd() . DIRECTORY_SEPARATOR . "../images";
if( in_array ( $file_ext , $allowed_ext ) === false ){
echo " this file is not allowed ";
}else{
if( $typefile == 'image/png' ){
$exe = ".png";
}elseif ( $typefile == 'image/jpeg' ){
$exe = ".jpg";
}elseif( $typefile == 'image/gif' ){
$exe = ".gif";
}
//new name
$newfilename = uniqid() . $exe;
//upload file
move_uploaded_file ( $file_tmp , $path . DIRECTORY_SEPARATOR . $newfilename));
}
در این کد برای امنیت بیشتر نام فایل نیز تغییر داده شده است.