PDA

View Full Version : سوال: پشتیبانی نکردن هاست از برخی از دستورات فایل زیپ



ravand
شنبه 18 اردیبهشت 1395, 12:19 عصر
سلام
من برای فایل زیپ از یه سری دستورات استفاده میکنم که هاستم ازشون پشتیبانی نمیکنه. این دستورات:


new ZipArchive

zip_open()
راه حلی برای رفع این مشکل هست؟

cpuram
شنبه 18 اردیبهشت 1395, 13:21 عصر
zip_open() نداریم open داریم.
http://php.net/manual/en/ziparchive.open.php

ravand
شنبه 18 اردیبهشت 1395, 13:44 عصر
zip_open() نداریم open داریم.
http://php.net/manual/en/ziparchive.open.php
اینو تست کن:

<?php
$zipu="test.zip";
$zip =@zip_open($zipu);
if(@zip_read($zip)==true){
echo "hast";
}else{
echo "nist";
}
@zip_close($zip);
?>

areeef
شنبه 18 اردیبهشت 1395, 14:18 عصر
خیر، هاستینگ باید ماژول هاشو فعال کند.

ravand
شنبه 18 اردیبهشت 1395, 14:22 عصر
خیر، هاستینگ باید ماژول هاشو فعال کند.
اگه بهشون بگم برام فعال میکنن یا میخوان حتما پولی بگرن؟

cpuram
شنبه 18 اردیبهشت 1395, 14:36 عصر
آخه شما اول
new ZipArchive رو اون بالا گذاشتید که اصلا ارتباطی به این توابع نداره.
حالا چرا از کلاس ZipArchive استفاده نمیکنید که منت هاستیک رو نکشید؟ خیلی کد نوشتید؟ یا مثل اینکه هر دوتاشون غیر فعالن؟

ravand
شنبه 18 اردیبهشت 1395, 14:41 عصر
آخه شما اول
new ZipArchive رو اون بالا گذاشتید که اصلا ارتباطی به این توابع نداره.
حالا چرا از کلاس ZipArchive استفاده نمیکنید که منت هاستیک رو نکشید؟ خیلی کد نوشتید؟ یا مثل اینکه هر دوتاشون غیر فعالن؟
هر دوش غیرفعال بودن چند بار تست کردم کار نکردن! من برای امنیت میخوام ازشون استفاده کنم شما روش جایگزینی سراغ ندارید؟

cpuram
شنبه 18 اردیبهشت 1395, 14:44 عصر
امنیت برای کدوم قسمت؟ فایل زیپ که خودش امنیت رو پایین میاره چون میشه دانلودش کرد؟
فکر کنم بهتره روی سطح دسترسی ها کار کنید.

ravand
شنبه 18 اردیبهشت 1395, 14:48 عصر
امنیت برای کدوم قسمت؟ فایل زیپ که خودش امنیت رو پایین میاره چون میشه دانلودش کرد؟
فکر کنم بهتره روی سطح دسترسی ها کار کنید.
الان یکی قراره فایل زیپ آپلود کنه ولی میاد exe اپلود میکنه. من نمیخوام چیزی غیر از zip آپلود کنه. اگه فرد دانلود کنن اطلاع داشته باشه کل فایل رو از حالت زیپ خارج نمیکنه که سیستمش آلوده بشه. میاد یکی یکی فایل ها رو از توی فایل زیپ خارج میکنه از این لحاظ فکر میکنم مشکلی پیش نمیاد.

cpuram
شنبه 18 اردیبهشت 1395, 15:07 عصر
شما میخوایید فایل zip اپلود کنن بعد شما روی هاست بازش کنید و فایلی رو که لازم دارید رو از توش بردارید؟ اونوقت باید اسم اون فایل هم مشخص باشه یا ممکنه داخل فایل زیپ یه فایل مخرب باشه که پسوندش رو تغییر داده.

ravand
شنبه 18 اردیبهشت 1395, 17:49 عصر
شما میخوایید فایل zip اپلود کنن بعد شما روی هاست بازش کنید و فایلی رو که لازم دارید رو از توش بردارید؟ اونوقت باید اسم اون فایل هم مشخص باشه یا ممکنه داخل فایل زیپ یه فایل مخرب باشه که پسوندش رو تغییر داده.
بله اینم هست ولی مهم برای من اینه که هاست ویروسی نشه، سیستم کاربر برای من مهم نیست. الان سایت های مثل 4shared.com و picofile.com هم هستن که به این چیزی که شما میگی اهمیتی نمیدن. اصل اینه که کسی فایلی روی هاست آپلود نکنه که زیپ نباشه.

cpuram
شنبه 18 اردیبهشت 1395, 18:23 عصر
اگه هاست اشتراکی باشه شما هم تمام جوانب رو رعایت کنید یکی دیگه خراب کاری میکنه.
http://php.net/manual/en/book.rar.php
rar کار میکنه؟

ravand
شنبه 18 اردیبهشت 1395, 18:53 عصر
اگه هاست اشتراکی باشه شما هم تمام جوانب رو رعایت کنید یکی دیگه خراب کاری میکنه.
http://php.net/manual/en/book.rar.php
rar کار میکنه؟
این حتی توی زمپ هم برام کار نکرد. روی هاست هم همین مشکل رو داشت.

Fatal error: Class 'RarArchive' not found in
توی هاست یه جا هست به نام تغییر نسخه ی php . میخواستم تغییر بدم ولی میترسم برای بقیه ی دستوراتم هم مشکل پیش بیاد.

cpuram
شنبه 18 اردیبهشت 1395, 20:37 عصر
مگه قابلیت بازگشت نداره؟

ravand
شنبه 18 اردیبهشت 1395, 20:53 عصر
مگه قابلیت بازگشت نداره؟
اینو نمیدونم.

Unique
یک شنبه 19 اردیبهشت 1395, 18:41 عصر
رای من اینه که هاست ویروسی نشه، سیستم کاربر برای من مهم نیست.
جناب راوند ، هاست لینوکس که با فایل exe ویروسی نمیشه !!! امنیت کاربر هم که میگین به خودش مربوطه.

اگه هاست ویندوزی هم هست (که برای php نباید باشه) میتونید فایل را rename کنید که اجرا نشه یا کلا پسوندش را حذف کنید.

برای کلاس جایگزین هم توی سایت phpclasses.org را بگردین یا توی گوگل github php zip را جستجو کنید.

ravand
یک شنبه 19 اردیبهشت 1395, 19:56 عصر
جناب راوند ، هاست لینوکس که با فایل exe ویروسی نمیشه !!! امنیت کاربر هم که میگین به خودش مربوطه.

اگه هاست ویندوزی هم هست (که برای php نباید باشه) میتونید فایل را rename کنید که اجرا نشه یا کلا پسوندش را حذف کنید.

برای کلاس جایگزین هم توی سایت phpclasses.org را بگردین یا توی گوگل github php zip را جستجو کنید.
میدونم من به عنوان مثال گفتم exe . حتما فایل هایی هستن که برای سرور خطرناک هستن. منم گفتم امنیت کاربر مهم نیست امنیت هاست سایتم مهمه. که کسی چیزی غیر از زیپ آپلود نمیکنه که خطرناک باشه. من که از امنیت چیزی نمیدونم . نمیدونم چطوری هک میکنن. برای همین سوال کردم.

Unique
یک شنبه 19 اردیبهشت 1395, 20:50 عصر
میدونم من به عنوان مثال گفتم exe . حتما فایل هایی هستن که برای سرور خطرناک هستن.
امنیت خیلی نسبیه ! هاستی که بگه فایل ارسالی شما برای سرور مشکل ساز شده به درد نمیخوره. هاست باید کاربر را اصطلاحا توی دایرکتوری خودش jail کنه و فایل هاش هیچ تاثیری روی سرور نداشته باشه.

در مورد امنیت سایت خودتون هم بستگی داره شما چه فایلی را با چه پسوندی میگیرین و فایل را با چه permission ی توی چه فولدری با چه permission ی ذخیره میکنین. به جای اینکه با زیپ کردن مانع از بروز مشکلات امنیتی بشین ، در مورد امنیت ارسال و ذخیره فایل ها مطالعه کنین. اگه تنظیمات هاست شما اصولی باشه و فولدر شما دسترسی آنلاین نداشته باشه (حتی میتونید فایل ها را خارج از wwwroot ذخیره کنید) مشکل حادی نخواهید داشت.

negative60
یک شنبه 19 اردیبهشت 1395, 22:06 عصر
میدونم من به عنوان مثال گفتم exe . حتما فایل هایی هستن که برای سرور خطرناک هستن. منم گفتم امنیت کاربر مهم نیست امنیت هاست سایتم مهمه. که کسی چیزی غیر از زیپ آپلود نمیکنه که خطرناک باشه. من که از امنیت چیزی نمیدونم . نمیدونم چطوری هک میکنن. برای همین سوال کردم.

اول اینکه زیپ و آنزیپ کردن اگر تعداد استفاده کنندگان بالا باشه یا حجم فایل زیاد باشه cpu زیادی مصرف می‌شه
دو اینکه اصلا نیاز به این کارها نیست! جواب خیلی‌ سادست‌ اگر ۳ حرف آخر اسم فایل zip نبود اجازه آپلود ندید
و اینکه برای فعال کردن ماژول یه تیکت به بخش پشتیبانی‌ بزنید با اونها مکاتبه کنید چرا اینجا سوال می‌کنید نترسید برای تیکت پولی‌ دریافت نمیکنند

Unique
دوشنبه 20 اردیبهشت 1395, 00:18 صبح
دو اینکه اصلا نیاز به این کارها نیست! جواب سادست‌ اگر ۳ خیلی‌ حرف آخر اسم فایل zip نبود اجازه آپلود ندید
خیر شما اشتباه میکنید ،‌ توی لینوکس پسوند فایل اصلا مهم نیست ،‌یک فایل میتونه اجرایی باشه اما پسوندش zip باشه ، عکس باشه اما پسوندش exe باشه. php باشه اما پسوندش jpg باشه. لینوکس فایل را بر اساس header ش و نوعش و محتواش تشخیص میده نه پسوندش و اگه فایل مخرب باشه و امنیت هاست پایین باشه میشه خیلی کار ها کرد.


و اینکه برای فعال کردن ماژول یه تیکت به بخش پشتیبانی‌ بزنید با اونها مکاتبه کنید چرا اینجا سوال می‌کنید نترسید برای تیکت پولی‌ دریافت نمیکنند
روی سرویس های shared عموما برای یک نفر کانفیگ را تغییر نمیدن (حالا اینکه میخواد فقط یک Library را فعال کنه). اما میتونن امتحان کنن.

ravand
دوشنبه 20 اردیبهشت 1395, 06:51 صبح
امنیت خیلی نسبیه ! هاستی که بگه فایل ارسالی شما برای سرور مشکل ساز شده به درد نمیخوره. هاست باید کاربر را اصطلاحا توی دایرکتوری خودش jail کنه و فایل هاش هیچ تاثیری روی سرور نداشته باشه.

در مورد امنیت سایت خودتون هم بستگی داره شما چه فایلی را با چه پسوندی میگیرین و فایل را با چه permission ی توی چه فولدری با چه permission ی ذخیره میکنین. به جای اینکه با زیپ کردن مانع از بروز مشکلات امنیتی بشین ، در مورد امنیت ارسال و ذخیره فایل ها مطالعه کنین. اگه تنظیمات هاست شما اصولی باشه و فولدر شما دسترسی آنلاین نداشته باشه (حتی میتونید فایل ها را خارج از wwwroot ذخیره کنید) مشکل حادی نخواهید داشت.
یکی میگفت با htaccess نمیشه توی هاست هاش اشتراکی امنیت رو کامل کرد. مورد wwwroot رو هم نمیدونم . علت اینکه میخوام زیپ کنم. فقط امنیت نیست. شما میخوای برای مثال یه اسکریپت رو بذاری برای دانلود. نمیتونی که به ملت بگی یکی یکی فایل ها رو دانلود کنید. مجبوری توی یه فایل زیپ قرار بدی. منم برای همین این کار رو میخوام بکنم.

Unique
دوشنبه 20 اردیبهشت 1395, 07:54 صبح
من از این کلاس (http://www.phpclasses.org/package/3864-PHP-Create-and-extract-ZIP-archives-in-purely-in-PHP.html) در گذشته استفاده کردم که کاملا Pure PHP هست و کار میده.

cpuram
دوشنبه 20 اردیبهشت 1395, 10:05 صبح
کسی که فایلش zip میشه دیگه فکر کنم برای سرور بیخطر باشه و نیازی به چک کردن نباشه چون وقتی zip میشه آرایش دیتاها عوض میشه و تا unzip نشه ماهیت خودش رو نداره.

Unique
دوشنبه 20 اردیبهشت 1395, 16:02 عصر
یکی میگفت با htaccess نمیشه توی هاست هاش اشتراکی امنیت رو کامل کرد.
اگه منظورش امنیت به صورت مطلق باشی که خوب معلومه ، با یک روش نمیشه امنیت را تامین کرد ام اگه منظورش کنترل دسترسی ها باشه اشتباهه ! توی سرویس دهنده Apache و مبتنی بر htaccess به راحتی میشه دسترسی ها را با htaccess کنترل کرد.


کسی که فایلش zip میشه دیگه فکر کنم برای سرور بیخطر باشه و نیازی به چک کردن نباشه چون وقتی zip میشه آرایش دیتاها عوض میشه و تا unzip نشه ماهیت خودش رو نداره.
وقتی میشه با کنترل دسترسی ها و فایل های ارسالی امنیت را برقرار کرد. zip کردن فایل ها و Overhead ی که روی سرور میگذاره قابل قبول نیست. مخصوصا اگه حجم فایل ها بالا بره یا کاربران به صورت همزمان در حال upload و download باشن.

ravand
دوشنبه 20 اردیبهشت 1395, 18:30 عصر
یه مشکل برای من توی کار با این کلاس پش امد:
ببینید من اول امدم یک فایل زیپ را به نام 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";
}
?>

ولی وفتی امدم به روش زیر خواستم از کلاس استفاده کنم اخطار میده:

<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";
}
}
?>

هر کاریسم کردم فایده ای نداشت.
البته اینو بگم که توی لوکال مشکلی نداشت و فقط روی هاست مشکل داشت. فکر میکنم قبلا هم همین مشکل رو داشتم ولی یادم نیست چطوری حلش کردم؟

Unique
سه شنبه 21 اردیبهشت 1395, 01:46 صبح
اول اینکه basename روی آرایه FILES_$ به شما اسم فایل را میده نه مسیرش را که بدین به کلاس zip در ثانی اگه میخوای قبل از move کردن از temp به فایل دسترسی پیدا کنی باید این را بزنی :

$mo=$zipfile->read_zip($_FILES['uploaded']['tmp_name']);

البته ممکنه دسترسی مستقیم به temp را بسته باشه هاست که باید با move_uploaded_file اول ذخیرش کنی بعد با آدرسی که ذخیره کردی بازش کنی.

negative60
سه شنبه 21 اردیبهشت 1395, 03:44 صبح
خیر شما اشتباه میکنید ،‌ توی لینوکس پسوند فایل اصلا مهم نیست ،‌یک فایل میتونه اجرایی باشه اما پسوندش zip باشه ، عکس باشه اما پسوندش exe باشه. php باشه اما پسوندش jpg باشه. لینوکس فایل را بر اساس header ش و نوعش و محتواش تشخیص میده نه پسوندش و اگه فایل مخرب باشه و امنیت هاست پایین باشه میشه خیلی کار ها کرد.

ما دسترسی‌ به سیستنم عامل نداریم و تنها راه ارتباطی‌ کاربر با هاست به وسیله وبسرور انجام می‌شه چه لینوکس باشه چه ویندوز اجرایی بودن یا نبودن رو وبسرور مشخص می‌کنه حالا شما لینک فایل اجرایی که آپلود کردیدرو باز کنید چیزی که اتفاق میفته اینه فقط محتوی فایل برای شما ارسال خواهد شد تا زمانی‌ که فایل توسط سیستم عامل اجرا نشه هیچ خطری نداره


روی سرویس های shared عموما برای یک نفر کانفیگ را تغییر نمیدن (حالا اینکه میخواد فقط یک Library را فعال کنه). اما میتونن امتحان کنن.

اگر از لحاظ امنیتی برای سرور مشکلی‌ ایجاد نکنه یا فشار زیادی روی سرور نیاره تغییر میدن

Unique
سه شنبه 21 اردیبهشت 1395, 21:46 عصر
حالا شما لینک فایل اجرایی که آپلود کردیدرو باز کنید چیزی که اتفاق میفته اینه فقط محتوی فایل برای شما ارسال خواهد شد تا زمانی‌ که فایل توسط سیستم عامل اجرا نشه هیچ خطری نداره

هونظور که گفتم به این بستگی داره که سرور چطور کانفیگ شده باشه ، کلا اگه کاربر توی محدوده دایرکتوری خودش زندانی بشه و دسترسی به فایل سیستم و منابع براش از طریق سرویس دهنده یا سیستم عامل محدود شده باشه هیچ مشکلی برای هاست پیش نمیاد و برای همین بود گفتم که هاستی که بابت فایل ویروسی روی سرویس دهنده حتی ویندوز شاکی باشه به درد نمیخوره وباید عوض بشه.

اینکه ویندوز و لینوکس را یکی میدونین توی تامین این امنیت باید بگم اشتباه میکنید و این دو تا چه در مقایسه IIS و Apache و امثالهم و چه در قیاس سیستم عامل خیلی تفاوت دارن در زمینه تامین امنیت میزبانی !

باگ های امنیتی زیادی وجود داره که در صورت صحیح کانفیگ نشدن سرویس دهنده حتی میشه کد های php را از طریق فراخوانی فایل jpg اجرا کرد و بر اساس دسترسی اون فایل و سرویس دهنده به منابع خیلی کار ها کرد. جالب اینه من خودم متخصص امنیت شبکه و وب نیستم اما این مباحث خیلی پیش پا افتاده هست و اینجوری ساده انگاری کل قضیه جز خسارت چیزی به همراه نداره.

negative60
چهارشنبه 22 اردیبهشت 1395, 00:37 صبح
هونظور که گفتم به این بستگی داره که سرور چطور کانفیگ شده باشه ، کلا اگه کاربر توی محدوده دایرکتوری خودش زندانی بشه و دسترسی به فایل سیستم و منابع براش از طریق سرویس دهنده یا سیستم عامل محدود شده باشه هیچ مشکلی برای هاست پیش نمیاد و برای همین بود گفتم که هاستی که بابت فایل ویروسی روی سرویس دهنده حتی ویندوز شاکی باشه به درد نمیخوره وباید عوض بشه.

ما داریم در مورد آپلود یک فایل با پسوند مشخص zip صحبت می‌کنیم و تمام صحبت‌هایی که می‌شه در رابطه با همین موضوع هست نه طریقه کانفیگ سرور اگه سروی این نکاتی‌ که عرض کردید رو رعایت نکرده باشه مطمئناً از قبل بهش نفوذ شده



اینکه ویندوز و لینوکس را یکی میدونین توی تامین این امنیت باید بگم اشتباه میکنید و این دو تا چه در مقایسه IIS و Apache و امثالهم و چه در قیاس سیستم عامل خیلی تفاوت دارن در زمینه تامین امنیت میزبانی !
عرض کردم کاربر به سیستم عامل دسترسی‌ نداره و تنها راه ارتباطی‌ از طریق وبسرور انجام می‌شه کجای صحبت من مقایسه امنیت و کانفیگ این دو سیستم عامل بوده؟

User-------> WebServer------> OS




باگ های امنیتی زیادی وجود داره که در صورت صحیح کانفیگ نشدن سرویس دهنده حتی میشه کد های php را از طریق فراخوانی فایل jpg اجرا کرد و بر اساس دسترسی اون فایل و سرویس دهنده به منابع خیلی کار ها کرد. جالب اینه من خودم متخصص امنیت شبکه و وب نیستم اما این مباحث خیلی پیش پا افتاده هست و اینجوری ساده انگاری کل قضیه جز خسارت چیزی به همراه نداره.

اگر سروری مشکل امنیتی داشته باشه تامین امنیت اون خارج از کنترل و اختیارات برنامه نویس هست, اون باگ JPG خدابیامرز برای چندین سال پیش بود و خیلی‌ وقته پچ شده

Unique
چهارشنبه 22 اردیبهشت 1395, 13:03 عصر
ما داریم در مورد آپلود یک فایل با پسوند مشخص zip صحبت می‌کنیم
ببینین شما میگین "حالا شما لینک فایل اجرایی که آپلود کردیدرو باز کنید " در واقع خودتون بحث را از زیپ جدا میکنین.

اینکه تا این حد در مورد پسوند zip و نوع zip حساسیت دارین برای من جالبه چون نمیشه بر فرض اینکه پسوند یک فایلی zip هست به طور کلی بگیم "اگه فراخونی بشه اتفاقی نمیفته"
کلا وقتی فایل های دریافتی از نظر اعتبار بررسی نشوند و مجوز های دسترسی کاربر به پوشه ها تعیین نشه راه ارسال فایل مخرب و اجراش باز میشه حالا اینکه چطور اجراش کنیم بر میگرده به نقص های دیگه سایت و هاست !


نه طریقه کانفیگ سرور اگه سروی این نکاتی‌ که عرض کردید رو رعایت نکرده باشه مطمئناً از قبل بهش نفوذ شده
اصلا اینطور نیست ، مگه ربات ها و crawler ها سایت ها را عموما هک میکنند که بگیم از قبل هک شده یا کاربر هر سایتی اتفاقا برنامه نویس و یا هکر باشه و حوصله بکنه بشینه سایت و هاست را از نظر امنیتی بررسی بکنه و اگه قابل هک بود هکش کنه !؟ دوست عزیز سایت هایی هستند که چندین سال بدون مشکل کار میکردن و وقتی کسی باهاشون زاویه پیدا کرده و ارزش هک داشتند براحتی هک شدن همینطور هاستینگ های اینطوری !


عرض کردم کاربر به سیستم عامل دسترسی‌ نداره و تنها راه ارتباطی‌ از طریق وبسرور انجام می‌شه کجای صحبت من مقایسه امنیت و کانفیگ این دو سیستم عامل بوده؟
من از این بابت گفتم که ضعف های دو تا سیستم عامل در رابطه با این موضوع متفاوته ! شاید بد متوجه صحبت شما شدم. قطعا وب سرور جز اسکریپت که اونم میده به مفسرش که پردازش کنه تصمیمی نمیگیره اما اینکه اون اسکریپت چیه و توی چه بستری و با چه کانفیگی داره اجرا میشه خیلی مهمه.


اگر سروری مشکل امنیتی داشته باشه تامین امنیت اون خارج از کنترل و اختیارات برنامه نویس هست
بله مشکل های امنیتی حاد را هیچ کاریش نمیشه کرد اما موارد ریز و گاها سهوی هست که میشه ازش سوء استفاده کرد. اینکه شما اصل را بر این بگذاری همه هاستینگ ها میدونن دارن چیکار میکنن و امن هستند چون اسمش فلان و فلان و فلان هست یا ۱۰ ساله توی مارکت هستند ساده انگاریه !


اون باگ JPG خدابیامرز برای چندین سال پیش بود و خیلی‌ وقته پچ شده
اصلا این موضوع باگ نبوده و نیست که بخواد پچ بشه !!!! بسته به تنظیمات آپاچی و htaccess برنامه نویس میشه امکانش را فراهم کردم ... (در مورد فایل های gif و پسوند های دیگه هم مشکلات مشابهی هست.)