سلام
من برای فایل زیپ از یه سری دستورات استفاده میکنم که هاستم ازشون پشتیبانی نمیکنه. این دستورات:
new ZipArchive
zip_open()
راه حلی برای رفع این مشکل هست؟
سلام
من برای فایل زیپ از یه سری دستورات استفاده میکنم که هاستم ازشون پشتیبانی نمیکنه. این دستورات:
new ZipArchive
zip_open()
راه حلی برای رفع این مشکل هست؟
zip_open() نداریم open داریم.
http://php.net/manual/en/ziparchive.open.php
خیر، هاستینگ باید ماژول هاشو فعال کند.
آخه شما اول
new ZipArchive رو اون بالا گذاشتید که اصلا ارتباطی به این توابع نداره.
حالا چرا از کلاس ZipArchive استفاده نمیکنید که منت هاستیک رو نکشید؟ خیلی کد نوشتید؟ یا مثل اینکه هر دوتاشون غیر فعالن؟
امنیت برای کدوم قسمت؟ فایل زیپ که خودش امنیت رو پایین میاره چون میشه دانلودش کرد؟
فکر کنم بهتره روی سطح دسترسی ها کار کنید.
الان یکی قراره فایل زیپ آپلود کنه ولی میاد exe اپلود میکنه. من نمیخوام چیزی غیر از zip آپلود کنه. اگه فرد دانلود کنن اطلاع داشته باشه کل فایل رو از حالت زیپ خارج نمیکنه که سیستمش آلوده بشه. میاد یکی یکی فایل ها رو از توی فایل زیپ خارج میکنه از این لحاظ فکر میکنم مشکلی پیش نمیاد.
شما میخوایید فایل zip اپلود کنن بعد شما روی هاست بازش کنید و فایلی رو که لازم دارید رو از توش بردارید؟ اونوقت باید اسم اون فایل هم مشخص باشه یا ممکنه داخل فایل زیپ یه فایل مخرب باشه که پسوندش رو تغییر داده.
اگه هاست اشتراکی باشه شما هم تمام جوانب رو رعایت کنید یکی دیگه خراب کاری میکنه.
http://php.net/manual/en/book.rar.php
rar کار میکنه؟
مگه قابلیت بازگشت نداره؟
جناب راوند ، هاست لینوکس که با فایل exe ویروسی نمیشه !!! امنیت کاربر هم که میگین به خودش مربوطه.رای من اینه که هاست ویروسی نشه، سیستم کاربر برای من مهم نیست.
اگه هاست ویندوزی هم هست (که برای php نباید باشه) میتونید فایل را rename کنید که اجرا نشه یا کلا پسوندش را حذف کنید.
برای کلاس جایگزین هم توی سایت phpclasses.org را بگردین یا توی گوگل github php zip را جستجو کنید.
امنیت خیلی نسبیه ! هاستی که بگه فایل ارسالی شما برای سرور مشکل ساز شده به درد نمیخوره. هاست باید کاربر را اصطلاحا توی دایرکتوری خودش jail کنه و فایل هاش هیچ تاثیری روی سرور نداشته باشه.میدونم من به عنوان مثال گفتم exe . حتما فایل هایی هستن که برای سرور خطرناک هستن.
در مورد امنیت سایت خودتون هم بستگی داره شما چه فایلی را با چه پسوندی میگیرین و فایل را با چه permission ی توی چه فولدری با چه permission ی ذخیره میکنین. به جای اینکه با زیپ کردن مانع از بروز مشکلات امنیتی بشین ، در مورد امنیت ارسال و ذخیره فایل ها مطالعه کنین. اگه تنظیمات هاست شما اصولی باشه و فولدر شما دسترسی آنلاین نداشته باشه (حتی میتونید فایل ها را خارج از wwwroot ذخیره کنید) مشکل حادی نخواهید داشت.
اول اینکه زیپ و آنزیپ کردن اگر تعداد استفاده کنندگان بالا باشه یا حجم فایل زیاد باشه cpu زیادی مصرف میشه
دو اینکه اصلا نیاز به این کارها نیست! جواب خیلی سادست اگر ۳ حرف آخر اسم فایل zip نبود اجازه آپلود ندید
و اینکه برای فعال کردن ماژول یه تیکت به بخش پشتیبانی بزنید با اونها مکاتبه کنید چرا اینجا سوال میکنید نترسید برای تیکت پولی دریافت نمیکنند
خیر شما اشتباه میکنید ، توی لینوکس پسوند فایل اصلا مهم نیست ،یک فایل میتونه اجرایی باشه اما پسوندش zip باشه ، عکس باشه اما پسوندش exe باشه. php باشه اما پسوندش jpg باشه. لینوکس فایل را بر اساس header ش و نوعش و محتواش تشخیص میده نه پسوندش و اگه فایل مخرب باشه و امنیت هاست پایین باشه میشه خیلی کار ها کرد.دو اینکه اصلا نیاز به این کارها نیست! جواب سادست اگر ۳ خیلی حرف آخر اسم فایل zip نبود اجازه آپلود ندید
روی سرویس های shared عموما برای یک نفر کانفیگ را تغییر نمیدن (حالا اینکه میخواد فقط یک Library را فعال کنه). اما میتونن امتحان کنن.و اینکه برای فعال کردن ماژول یه تیکت به بخش پشتیبانی بزنید با اونها مکاتبه کنید چرا اینجا سوال میکنید نترسید برای تیکت پولی دریافت نمیکنند
یکی میگفت با htaccess نمیشه توی هاست هاش اشتراکی امنیت رو کامل کرد. مورد wwwroot رو هم نمیدونم . علت اینکه میخوام زیپ کنم. فقط امنیت نیست. شما میخوای برای مثال یه اسکریپت رو بذاری برای دانلود. نمیتونی که به ملت بگی یکی یکی فایل ها رو دانلود کنید. مجبوری توی یه فایل زیپ قرار بدی. منم برای همین این کار رو میخوام بکنم.
من از این کلاس در گذشته استفاده کردم که کاملا Pure PHP هست و کار میده.
کسی که فایلش zip میشه دیگه فکر کنم برای سرور بیخطر باشه و نیازی به چک کردن نباشه چون وقتی zip میشه آرایش دیتاها عوض میشه و تا unzip نشه ماهیت خودش رو نداره.
اگه منظورش امنیت به صورت مطلق باشی که خوب معلومه ، با یک روش نمیشه امنیت را تامین کرد ام اگه منظورش کنترل دسترسی ها باشه اشتباهه ! توی سرویس دهنده Apache و مبتنی بر htaccess به راحتی میشه دسترسی ها را با htaccess کنترل کرد.یکی میگفت با htaccess نمیشه توی هاست هاش اشتراکی امنیت رو کامل کرد.
وقتی میشه با کنترل دسترسی ها و فایل های ارسالی امنیت را برقرار کرد. zip کردن فایل ها و Overhead ی که روی سرور میگذاره قابل قبول نیست. مخصوصا اگه حجم فایل ها بالا بره یا کاربران به صورت همزمان در حال upload و download باشن.کسی که فایلش zip میشه دیگه فکر کنم برای سرور بیخطر باشه و نیازی به چک کردن نباشه چون وقتی zip میشه آرایش دیتاها عوض میشه و تا unzip نشه ماهیت خودش رو نداره.
یه مشکل برای من توی کار با این کلاس پش امد:
ببینید من اول امدم یک فایل زیپ را به نام file.zip روی هاستم آپلود کردم. بعد از این کدها استفاده کردم برنامه درست کار کرد:
<?php
require "zip.class.php"; // Get the zipfile class
$zipfile = new zipfile; // Create an object
$zipu ="file.zip";
$mo=$zipfile->read_zip($zipu); // Read the zip file
if($mo!=true){
die("این فایل زیپ نیست.");
exit;
}else{
echo "hast";
}
?>
ولی وفتی امدم به روش زیر خواستم از کلاس استفاده کنم اخطار میده:
کد HTML:<form enctype="multipart/form-data" action="test.php" method="post"> <input type="file" name="uploaded"> <input type="submit" name="sub" value="ارسال"> </form><?php
if(isset($_POST['sub'])){
require "zip.class.php"; // Get the zipfile class
$zipfile = new zipfile; // Create an object
$zipu =basename($_FILES['uploaded']['name']);
$mo=$zipfile->read_zip($zipu); // Read the zip file
if($mo!=true){
die("این فایل زیپ نیست.");
exit;
}else{
echo "hast";
}
}
?>
هر کاریسم کردم فایده ای نداشت.
البته اینو بگم که توی لوکال مشکلی نداشت و فقط روی هاست مشکل داشت. فکر میکنم قبلا هم همین مشکل رو داشتم ولی یادم نیست چطوری حلش کردم؟
اول اینکه basename روی آرایه FILES_$ به شما اسم فایل را میده نه مسیرش را که بدین به کلاس zip در ثانی اگه میخوای قبل از move کردن از temp به فایل دسترسی پیدا کنی باید این را بزنی :
$mo=$zipfile->read_zip($_FILES['uploaded']['tmp_name']);
البته ممکنه دسترسی مستقیم به temp را بسته باشه هاست که باید با move_uploaded_file اول ذخیرش کنی بعد با آدرسی که ذخیره کردی بازش کنی.
ما دسترسی به سیستنم عامل نداریم و تنها راه ارتباطی کاربر با هاست به وسیله وبسرور انجام میشه چه لینوکس باشه چه ویندوز اجرایی بودن یا نبودن رو وبسرور مشخص میکنه حالا شما لینک فایل اجرایی که آپلود کردیدرو باز کنید چیزی که اتفاق میفته اینه فقط محتوی فایل برای شما ارسال خواهد شد تا زمانی که فایل توسط سیستم عامل اجرا نشه هیچ خطری ندارهخیر شما اشتباه میکنید ، توی لینوکس پسوند فایل اصلا مهم نیست ،یک فایل میتونه اجرایی باشه اما پسوندش zip باشه ، عکس باشه اما پسوندش exe باشه. php باشه اما پسوندش jpg باشه. لینوکس فایل را بر اساس header ش و نوعش و محتواش تشخیص میده نه پسوندش و اگه فایل مخرب باشه و امنیت هاست پایین باشه میشه خیلی کار ها کرد.
اگر از لحاظ امنیتی برای سرور مشکلی ایجاد نکنه یا فشار زیادی روی سرور نیاره تغییر میدنروی سرویس های shared عموما برای یک نفر کانفیگ را تغییر نمیدن (حالا اینکه میخواد فقط یک Library را فعال کنه). اما میتونن امتحان کنن.
هونظور که گفتم به این بستگی داره که سرور چطور کانفیگ شده باشه ، کلا اگه کاربر توی محدوده دایرکتوری خودش زندانی بشه و دسترسی به فایل سیستم و منابع براش از طریق سرویس دهنده یا سیستم عامل محدود شده باشه هیچ مشکلی برای هاست پیش نمیاد و برای همین بود گفتم که هاستی که بابت فایل ویروسی روی سرویس دهنده حتی ویندوز شاکی باشه به درد نمیخوره وباید عوض بشه.حالا شما لینک فایل اجرایی که آپلود کردیدرو باز کنید چیزی که اتفاق میفته اینه فقط محتوی فایل برای شما ارسال خواهد شد تا زمانی که فایل توسط سیستم عامل اجرا نشه هیچ خطری نداره
اینکه ویندوز و لینوکس را یکی میدونین توی تامین این امنیت باید بگم اشتباه میکنید و این دو تا چه در مقایسه IIS و Apache و امثالهم و چه در قیاس سیستم عامل خیلی تفاوت دارن در زمینه تامین امنیت میزبانی !
باگ های امنیتی زیادی وجود داره که در صورت صحیح کانفیگ نشدن سرویس دهنده حتی میشه کد های php را از طریق فراخوانی فایل jpg اجرا کرد و بر اساس دسترسی اون فایل و سرویس دهنده به منابع خیلی کار ها کرد. جالب اینه من خودم متخصص امنیت شبکه و وب نیستم اما این مباحث خیلی پیش پا افتاده هست و اینجوری ساده انگاری کل قضیه جز خسارت چیزی به همراه نداره.
ما داریم در مورد آپلود یک فایل با پسوند مشخص zip صحبت میکنیم و تمام صحبتهایی که میشه در رابطه با همین موضوع هست نه طریقه کانفیگ سرور اگه سروی این نکاتی که عرض کردید رو رعایت نکرده باشه مطمئناً از قبل بهش نفوذ شده
عرض کردم کاربر به سیستم عامل دسترسی نداره و تنها راه ارتباطی از طریق وبسرور انجام میشه کجای صحبت من مقایسه امنیت و کانفیگ این دو سیستم عامل بوده؟اینکه ویندوز و لینوکس را یکی میدونین توی تامین این امنیت باید بگم اشتباه میکنید و این دو تا چه در مقایسه IIS و Apache و امثالهم و چه در قیاس سیستم عامل خیلی تفاوت دارن در زمینه تامین امنیت میزبانی !
User-------> WebServer------> OS
اگر سروری مشکل امنیتی داشته باشه تامین امنیت اون خارج از کنترل و اختیارات برنامه نویس هست, اون باگ JPG خدابیامرز برای چندین سال پیش بود و خیلی وقته پچ شده
ببینین شما میگین "حالا شما لینک فایل اجرایی که آپلود کردیدرو باز کنید " در واقع خودتون بحث را از زیپ جدا میکنین.ما داریم در مورد آپلود یک فایل با پسوند مشخص zip صحبت میکنیم
اینکه تا این حد در مورد پسوند zip و نوع zip حساسیت دارین برای من جالبه چون نمیشه بر فرض اینکه پسوند یک فایلی zip هست به طور کلی بگیم "اگه فراخونی بشه اتفاقی نمیفته"
کلا وقتی فایل های دریافتی از نظر اعتبار بررسی نشوند و مجوز های دسترسی کاربر به پوشه ها تعیین نشه راه ارسال فایل مخرب و اجراش باز میشه حالا اینکه چطور اجراش کنیم بر میگرده به نقص های دیگه سایت و هاست !
اصلا اینطور نیست ، مگه ربات ها و crawler ها سایت ها را عموما هک میکنند که بگیم از قبل هک شده یا کاربر هر سایتی اتفاقا برنامه نویس و یا هکر باشه و حوصله بکنه بشینه سایت و هاست را از نظر امنیتی بررسی بکنه و اگه قابل هک بود هکش کنه !؟ دوست عزیز سایت هایی هستند که چندین سال بدون مشکل کار میکردن و وقتی کسی باهاشون زاویه پیدا کرده و ارزش هک داشتند براحتی هک شدن همینطور هاستینگ های اینطوری !نه طریقه کانفیگ سرور اگه سروی این نکاتی که عرض کردید رو رعایت نکرده باشه مطمئناً از قبل بهش نفوذ شده
من از این بابت گفتم که ضعف های دو تا سیستم عامل در رابطه با این موضوع متفاوته ! شاید بد متوجه صحبت شما شدم. قطعا وب سرور جز اسکریپت که اونم میده به مفسرش که پردازش کنه تصمیمی نمیگیره اما اینکه اون اسکریپت چیه و توی چه بستری و با چه کانفیگی داره اجرا میشه خیلی مهمه.عرض کردم کاربر به سیستم عامل دسترسی نداره و تنها راه ارتباطی از طریق وبسرور انجام میشه کجای صحبت من مقایسه امنیت و کانفیگ این دو سیستم عامل بوده؟
بله مشکل های امنیتی حاد را هیچ کاریش نمیشه کرد اما موارد ریز و گاها سهوی هست که میشه ازش سوء استفاده کرد. اینکه شما اصل را بر این بگذاری همه هاستینگ ها میدونن دارن چیکار میکنن و امن هستند چون اسمش فلان و فلان و فلان هست یا ۱۰ ساله توی مارکت هستند ساده انگاریه !اگر سروری مشکل امنیتی داشته باشه تامین امنیت اون خارج از کنترل و اختیارات برنامه نویس هست
اصلا این موضوع باگ نبوده و نیست که بخواد پچ بشه !!!! بسته به تنظیمات آپاچی و htaccess برنامه نویس میشه امکانش را فراهم کردم ... (در مورد فایل های gif و پسوند های دیگه هم مشکلات مشابهی هست.)اون باگ JPG خدابیامرز برای چندین سال پیش بود و خیلی وقته پچ شده