Bagaimana untuk menggunakan fungsi input dan output pengguna untuk kawalan keselamatan muat naik dan muat turun fail dalam PHP?
Dalam aplikasi web moden, muat naik dan muat turun fail adalah ciri biasa. Walau bagaimanapun, pengendalian input dan output pengguna yang tidak betul boleh membawa kepada kelemahan keselamatan yang membolehkan pengguna berniat jahat memuat naik dan memuat turun fail berniat jahat atau melakukan operasi sensitif. Oleh itu, adalah penting untuk memahami cara menggunakan fungsi input dan output pengguna dalam PHP untuk kawalan keselamatan muat naik dan muat turun fail.
Kawalan keselamatan untuk muat naik fail
- Hadkan jenis fail yang dimuat naik: Sebelum memuat naik fail, pengesahan jenis fail diperlukan. Pengesahan boleh dilakukan menggunakan sambungan fail atau jenis MIME. Contohnya, hanya memuat naik fail imej boleh disahkan seperti ini:
1 2 3 4 5 6 7 8 9 | $allowedExtensions = [ 'jpg' , 'png' , 'gif' ];
$allowedMimeTypes = [ 'image/jpeg' , 'image/png' , 'image/gif' ];
$uploadedFileExtension = strtolower ( pathinfo ( $_FILES [ 'file' ][ 'name' ], PATHINFO_EXTENSION));
$uploadedFileType = $_FILES [ 'file' ][ 'type' ];
if (!in_array( $uploadedFileExtension , $allowedExtensions ) || !in_array( $uploadedFileType , $allowedMimeTypes )) {
}
|
Salin selepas log masuk
- Namakan semula fail yang dimuat naik: Untuk mengelakkan pengguna berniat jahat daripada memuat naik fail yang mengandungi kod hasad, dan mengawal laluan storan fail pada pelayan. Fail yang dimuat naik boleh dinamakan semula.
1 2 3 4 5 6 7 8 9 | $uploadedFileName = $_FILES [ 'file' ][ 'name' ];
$uploadedFileExtension = strtolower ( pathinfo ( $uploadedFileName , PATHINFO_EXTENSION));
$newFileName = uniqid(). '.' . $uploadedFileExtension ;
$newFilePath = '/path/to/upload/directory/' . $newFileName ;
if (move_uploaded_file( $_FILES [ 'file' ][ 'tmp_name' ], $newFilePath )){
}
|
Salin selepas log masuk
- Lakukan semakan keselamatan pada fail yang dimuat naik: Selain pengesahan jenis fail, semakan keselamatan pada kandungan fail juga diperlukan. Anda boleh menggunakan fungsi
getimagesize()
untuk menyemak sama ada fail itu imej sebenar atau menggunakan pustaka pihak ketiga untuk melakukan semakan keselamatan yang lebih ketat pada fail.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $fileData = file_get_contents ( $_FILES [ 'file' ][ 'tmp_name' ]);
if (!is_image( $fileData )){
}
function is_image( $fileData ){
$allowedMimeTypes = [ 'image/jpeg' , 'image/png' , 'image/gif' ];
if (function_exists( 'mime_content_type' )) {
$fileMimeType = mime_content_type( $fileData );
return in_array( $fileMimeType , $allowedMimeTypes );
} else {
$finfo = new finfo(FILEINFO_MIME_TYPE);
$fileMimeType = $finfo ->buffer( $fileData );
return in_array( $fileMimeType , $allowedMimeTypes );
}
}
|
Salin selepas log masuk
Kawalan Keselamatan untuk Muat Turun Fail
- Sahkan kebolehaksesan fail yang dimuat turun: Semasa memproses permintaan muat turun fail, anda perlu mengesahkan sama ada fail yang diminta ialah fail yang dibenarkan oleh pengguna untuk mengakses.
1 2 3 4 5 | $requestedFilePath = $_GET [ 'file' ];
if (! is_file ( $requestedFilePath ) || ! is_readable ( $requestedFilePath )){
}
|
Salin selepas log masuk
- Tetapkan pengepala HTTP untuk muat turun fail: Untuk memastikan fail yang dimuat turun tidak dilaksanakan secara langsung oleh penyemak imbas, anda perlu menetapkan pengepala HTTP yang betul.
1 2 3 4 5 6 | header( "Content-Type: application/octet-stream" );
header( "Content-Disposition: attachment; filename=" . basename ( $requestedFilePath ));
header( "Content-Transfer-Encoding: binary" );
header( "Content-Length: " . filesize ( $requestedFilePath ));
readfile( $requestedFilePath );
|
Salin selepas log masuk
Di atas ialah beberapa kaedah kawalan keselamatan biasa untuk muat naik dan muat turun fail menggunakan fungsi input dan output pengguna dalam PHP. Walau bagaimanapun, untuk kawalan keselamatan sebenar, aspek lain perlu dipertimbangkan, seperti had saiz fail, kawalan kebenaran direktori muat naik, had kelajuan muat turun, dsb. Digunakan bersama, kawalan ini boleh meningkatkan keselamatan fungsi muat naik dan muat turun fail.
Atas ialah kandungan terperinci Bagaimana untuk menggunakan fungsi input dan output pengguna untuk kawalan keselamatan muat naik dan muat turun fail dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!