PDA

View Full Version : راهنمایی برای امن کردن کد php



MrSharif
یک شنبه 15 دی 1392, 06:20 صبح
سلام


<?php

header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=\"".$_GET['name']."\"");
$file_content = file_get_contents($_GET['name']);
echo $file_content;

?>

کد بالا داری مشکل امنیتی LFI هست یعنی راحت میشه به صورت زیر ازش سو استفاده کرد

localhost/file.php?name=../../../../../etc/passwd
سوال بنده اینه چطور میتونم این کد رو امن کنم؟ یعنی کاری کنم که فقط پسوند zip رو دانلود کنه و هر پسوند دیگه به هر شکلی وارد شد ارور بده و اجازه دانلود نده

پشاپیش ممنون

MrSharif
یک شنبه 15 دی 1392, 23:13 عصر
واقعا اینجا انجمن برنامه نویسیه؟

metal gear solid 4
یک شنبه 15 دی 1392, 23:24 عصر
$filename = 'filename.zip';

$valid = array( 'zip' );

if ( in_array( pathinfo( $filename )['extension'], $valid ) )
echo 'OK';

engmmrj
یک شنبه 15 دی 1392, 23:48 عصر
pathinfo( $filename )['extension']
به این صورت تو بعضی از سرور ها با error مواجه میشین من خودم یک پروژه نوشته بودم که به همین روش استفاده کرده بودم وقتی که پروژه رو آپلود کردم با error مواجه شدم !

esi2020
دوشنبه 23 دی 1392, 23:12 عصر
با سلام البته شاید یه خورده دیر باشه اما با این قطعه کد می تونید extension رو چک کنید. البته اگر منظورتون رو درست متوجه شده باشم.



$path = "/home/test/test.zip"; // masir ya khude file

if(ChekZip($path)) // ejaze be download dar surate true budan
echo 'Download';

function ChekZip($path)
{
$ZipFile = pathinfo($path);
if($ZipFile['extension'] == 'zip')
return true; // megadr true dar surate zip budan
else
return false; // megdar false dar surate zip nabudan
}


100 البته با تابع mime_content_type هم می شه نوع فایل رو به صورت زیر مشخص کرد :



$path = "/home/test/test.zip";
$ZipFile = mime_content_type($path);
if($ZipFile == 'application/zip')
return true;