PDA

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



Kia_MLS
یک شنبه 26 خرداد 1392, 01:23 صبح
با عرض سلام و احترام خدمت همه دوستان عزیز

چند روز پیش یکی از سایت های من خیلی ساده به روش آپلود یک سری فایل بر روی مسیر Publish شده برنامه هک شد و به جای سایت من یک صفحه دیگه نمایش داده شد.

چطوری از اینگونه حملات جلوگیری کنم؟

من از Asp.net 2008 و سرور Windows server 2003 و IIS 6 استفاده میکنم.

mo.esmp
یک شنبه 26 خرداد 1392, 03:06 صبح
باید اجازەی آپلود هر نوع فایلی رو ندی، به عنوان مثال اگه کاربر فقط قراره عکس آپلود کنه:
در سمت کلاینت

var ext = $('#my_file_field').val().split('.').pop().toLower Case();
if($.inArray(ext, ['gif','png','jpg','jpeg']) == -1) {
alert('invalid extension!');
}

و در سمت سرور

var files = HttpContext.Request.Files;
foreach (string file in files)
{
var postedFile = files[file];
if (postedFile == null || postedFile.ContentLength == 0) continue;
var fileName = postedFile.FileName;
if (!string.IsNullOrWhiteSpace(fileName))
{
var ext = Path.GetExtension(fileName.ToLowerInvariant());
var allowrdExtensions = new List<string> {"gif", "png", "jpg", "jpeg"};
if (allowrdExtensions.IndexOf(ext) == -1)
{
throw new InvalidOperationException(
string.Format(
"You are not allowed to upload {0} file. Please upload only these files: {1}.",
Path.GetFileName(postedFile.FileName),
allowrdExtensions));
}
else
{
// Do some staff
}
}
}

اوبالیت به بو
یک شنبه 26 خرداد 1392, 12:05 عصر
باید اجازەی آپلود هر نوع فایلی رو ندی، به عنوان مثال اگه کاربر فقط قراره عکس آپلود کنه:

var ext = Path.GetExtension(fileName.ToLowerInvariant());
var allowrdExtensions = new List<string> {"gif", "png", "jpg", "jpeg"};
[/CSHARP]
درود بر شما

این دستوری که مشخص کردم رو هم میشه دور زد. یعنی احتمال حمله وجود داره. یکبار یک فایل آپلود کنید با نام program.exe.jpeg

می بینید که آپلود میشه. البته ممکن هست در نسخه های جدید نشه اما در دات نت های 4 به قبل آپلود میشه به راحتی. باید هدر فایل رو بخونید و با MIME Type های وب مقایسه کنید.

mohammad kafiyan
یک شنبه 26 خرداد 1392, 12:20 عصر
آقا می شه یک نمونه مثال بزنید


هدر فایل رو بخونید و با MIME Type های وب مقایسه کنید.

اوبالیت به بو
یک شنبه 26 خرداد 1392, 17:03 عصر
حتما.

1) برای بدست اوردن لیست MIME Type ها کافیه از wikipedia جدول اون رو مشاهده کنید. مثلا برای فایل های jpg باید بنویسید: image/jpg یا image/pjpg
2) برای خواندن نوع فایل از هدر فایل از دستور زیر استفاده کنید:


FileUpload1.PostedFile.ContentType


مثال:


if (FileUpload1.PostedFile.ContentType !="image/jpg"){
//return false;
}

Kia_MLS
دوشنبه 27 خرداد 1392, 00:40 صبح
با تشکر از همه دوستان، اما در هیچ جای سایت من فایل به عنوان وردی از کاربر دریافت نمیشه که بخوام هدر و Mime type اون رو بررسی کنم.
نهایتا از کاربر مشخصاتش دریافت میشه که اون هم برای ورودی ها مدودیت قایل شدم (MaxLen).

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

zerocool151
دوشنبه 27 خرداد 1392, 00:43 صبح
اسکریپت نویسی داخل تکت باکسارو بستی؟
Injection و بستی؟

Kia_MLS
دوشنبه 27 خرداد 1392, 00:48 صبح
تا جایی که من میدونم به صورت پیش فرض درون TextBox ها نمیشه اسکریپت وارد کرد مگر اینکه خود برنامه نویس اون رو فعال کرده باشه.
همچنبن به دلیل استفاده از LinQ در سایتی که نوشتم، حملات از نوع Injection نمیتونن عملی بشن.

mehrtash3000
دوشنبه 27 خرداد 1392, 02:45 صبح
اطلاعات برای تحلیل مشکل کافی نیست.
یا باید آدرس سایتو مشخص کنی و یا اطلاعات بیشتری ازش بدی .

Kia_MLS
دوشنبه 27 خرداد 1392, 18:45 عصر
آدرس سایت: http://ZabanAfza.com