مناسبترین روش برای قفل گذاری بر روی نرم افزار تحت وب

شروع موضوع توسط m1pfard ‏29 سپتامبر 2009 در انجمن برنامه‌نویسی با ASP.NET

  1. m1pfard

    m1pfard Member

    ارسال‌ها:
    406
    تشکر شده:
    119
    امتیاز دستاورد:
    16
    سلام.
    بعد از هزار سال بالاخره برگشتم خدمتتون!
    اصل مطلب: میشه لطفا یه راهنمایی بفرمائید چطور میشه رو یه نرم افزار تحت وب قفل گذاشت؟ (سخت افزاری و یا نرم افزاری) یه برنامه که ممکنه رو وب (اینترنت) نصب بشه و یا می تونه لوکال (اینترانت) اجرا بشه.
    ممنانم!!!
     
    نوشته شده توسط m1pfard در ‏29 سپتامبر 2009
  2. Arash_Niazmand

    Arash_Niazmand Member

    ارسال‌ها:
    150
    تشکر شده:
    119
    امتیاز دستاورد:
    16
    دوست من بازگشت شما رو تبریک می گم.

    در پاسخ به سوال شما مجبور به توضیح کوتاهی می شو م.
    در برنامه های تحت وب به این صورت عمل میشه .
    Request فزستاده میشه و همه فرم شما در server ساخته میشه .

    چیزی که ما این ور به عنوان کلاینت می بینیم یک سری اسکریپت هست که حاصل اجرای فرم در server هست .
    یادمون باشه که مقدار کدی که به سمت کاربر فرستاده میشه دیگه ما از اون به بعد رو نمیتونیم کنترل کنیم . یعنی کاربر می تواند هر تغیری
    در اون لحاظ کنه . حالا سوال اینجا مطرح میشه که با وجود این همه تغیرات احتمالی پس امنیت تکلیفش چی میشه .:
    تمام اعتبار سنجی ها هم در کلاینت و هم در server باید چک بشه .

    خوب این همه صحبت برای اینکه به اینجا برسم . شما با تولید کد در کلاینت نمیتونید یک قفل رو چک کنید ... ( نه اینکه نشه حتا شما میتونید با سخت افزار خاصی ارتباط برقرار کنید ) چون احتمال هک آن وجود داره مثلا با firebug به راحتی میشه اسکریپت ارسالی به سمت server را
    تغیر داد .

    به نظر من میشه برای اینکه شما backdoor نداشته باشید از یک کانال مابین استفاده کنید .

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

    1 - تولید رشته رندم میکنه و از اون یک url میسازه و در server اعتبار سنجی میشه و اگر در رنج معتبر باشه صفحه نمایش داده میشه .

    PHP:


    مثال :    http:/softname.com/pagename?736b646c6b61736c6b646c616b73646c6b61

     
    2- ورود به سیستم با رنج ip مشخص .

    3 - اتصال به یک سخت افزار و برسی قفل .

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

    موفق و پیروز باشید .
     
    نوشته شده توسط Arash_Niazmand در ‏29 سپتامبر 2009
    MDP و m1pfard از این پست تشکر کرده اند.
  3. sepidweb

    sepidweb Member

    ارسال‌ها:
    152
    تشکر شده:
    127
    امتیاز دستاورد:
    16
    برای یک نرم افزار تحت وب؟؟
    می شه برای این کار اولا یک وب سرویس مثلا در سایت خودتون ایجاد کنید مخصوص این کار.
    بعد در نرم افزاری که نوشتید، هر بار که نرم افزار بالا میاد، یک بار این وب سرویس اجرا بشه، و بر اساس مقدار خاصی، مثلا IP بررسی بشه که نرم افزاری که در حال اجرا هست از شما خریداری شده هست یا نه. اگر نبود، نرم افزار load نشه.
    برای مشتریانی هم که نرم افزار شما رو خریداری می کنند هم این کار باید انجام بشه که نام دامنه سایت خودشون رو به شما بدن تا اون رو توی لیست سایت های مجاز قرار بدید، و از طریق اون IP سایت اونها تایید شده باشه.
    نکته ای هم که باید توجه کرد اینه که کد مربوط به این ماجرا به صورت کامپایل شده (مثلا یه DLL) به مشتری تحویل بشه که نتونه در اون تغییر ایجاد کنه.
    همچنین از Dotfuscator یا یه همچین چیزی استفاده کنید که کد داخل DLL هم قابل بازیابی و ساخت مجدد نباشه.
     
    نوشته شده توسط sepidweb در ‏30 سپتامبر 2009
    MDP و m1pfard از این پست تشکر کرده اند.
  4. m1pfard

    m1pfard Member

    ارسال‌ها:
    406
    تشکر شده:
    119
    امتیاز دستاورد:
    16
    از هر دو عزیز خیلی خیلی و باز هم خیلی ممنون.
    ولی فرض کنید من یه نرم افزار دارم که این امکان رو به کاربر میده که هم رو وب (اینترنت) نصب بشه و / یا رو لوکال (یا یه سرور - شبکه داخلی)
    حالا اگه من برنامه رو (که با ASP.net هم هست و یک صفحه نصب هم داره) رو به صورت یه پک به مشتری تحویل بدم
    حالا اگه رو وب نصب کرد طبق راهنمایی شما یه جورایی میشه حلش کرد.
    ولی وقتی رو شبکه و لوکال باشه مشکل پیش میاد. چون ممکنه (که حتما) سی دی کپی میشه و به دوستان و آشنایان هدیه داده میشه!!!
    یه راه اینه که مک آدرس رو از روی سرور برداریم و فعال سازی از طریق خط تلفن انجام بشه و یا چندین راه دیگه که امیدوارم شما راهنماییم بکنید.

    ولی در کل به این نتیجه رسیدم که هنگام ارائه نرم افزار به مشتری باید نحوه استفاده اون هم مشخص بشه تا بشه در باره نوع قفل هم تصمیم گرفت.
     
    نوشته شده توسط m1pfard در ‏30 سپتامبر 2009
  5. m1pfard

    m1pfard Member

    ارسال‌ها:
    406
    تشکر شده:
    119
    امتیاز دستاورد:
    16
    انشام چطور بود حال کردین؟! دلم نیومد ویرایشش کنم تا شما هم یه خورده بخندید. شرمنده!!!
     
    نوشته شده توسط m1pfard در ‏30 سپتامبر 2009
  6. sepidweb

    sepidweb Member

    ارسال‌ها:
    152
    تشکر شده:
    127
    امتیاز دستاورد:
    16
    mac address روش خوبی نیست. چون برای virtual machine ها می شه هر mac address ای رو تعریف کرد! اونوقت اگر نرم افزار بیش از اندازه سنگین نباشه و بشه توی Virtual Machine اجراش کرد، با فعال کردن برای یک Mac Address تعریف شده، کارش تمومه.
    حتی احتمال می دم در لینوکس بشه Mac رو دستی تعریف کرد! اونوقت برنامه ت رو Mono بالا میاد!
    نمی دونم در این شرایط چه کاری می شه کرد. اما به نظر می رسه که local ها هم به هر حال معمولا به اینترنت دسترسی دارن.
    حداقل اینه که هر بار که خواستن application رو راه بندازن، لااقل یه مدت کوتاهی با اینترنت تلفنی وصل بشن، تا بالا بیاد و verify بشه، بعد قطع کنند تا دفعه بعدی که نیاز به restart پیش بیاد.
    انشات اونقدرها هم بد نبود واقعا! :wink:
     
    نوشته شده توسط sepidweb در ‏30 سپتامبر 2009
    MDP و m1pfard از این پست تشکر کرده اند.
  7. m1pfard

    m1pfard Member

    ارسال‌ها:
    406
    تشکر شده:
    119
    امتیاز دستاورد:
    16
    ممنون از راهنماییتون ببینیم چی پیدا میکنم.
     
    نوشته شده توسط m1pfard در ‏30 سپتامبر 2009
  8. Arash_Niazmand

    Arash_Niazmand Member

    ارسال‌ها:
    150
    تشکر شده:
    119
    امتیاز دستاورد:
    16
    باز هم از اینکه دوستانی فعال در این بخش می بینم خوشحالم .

    در ابتدا بگم که مشکل نصب شدن روی وب حل شده است .

    من برای local هم یک پیش نهاد کوچیک دادم ....

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

    اگر هم به صورت انبوه تولید میکنید ... میتونید یه فایل exe طراحی کنید که فایل aspx شما رو بسازه و اجرا کنه تحت مرورگر .
    حالا شاید بگید چرا فایل exe چون شما میتونید در ابتدا قفل سخت افزاری رو چک کنید و بعد هم با ساخت فایل aspx خود و اجرای آن در مرورگر برنامه کار میکنه .
    حالا بزارید در رابطه با فایل aspx ها بگم شما فقط یک صفحه خواهید داشت و مابقی به صورت user control که بعد از ساخت شما یک dll هستن کار خواهید کرد . پس اگر فایل exe اجرا نشه و فایل aspx ساخته و اجرا نشه و تمام اعتیار سنجی ها هم از طرف aspx سنجیده نشه برنامه شما اجرا ناپذیره .

    اگه تا اینجا سوالی هست بگید .

    موفق و پیروز باشید .
     
    نوشته شده توسط Arash_Niazmand در ‏30 سپتامبر 2009
    MDP و m1pfard از این پست تشکر کرده اند.
  9. m1pfard

    m1pfard Member

    ارسال‌ها:
    406
    تشکر شده:
    119
    امتیاز دستاورد:
    16
    ممنون ولی یه سوال
    اگه از همون نام دامنه و سریال برای نصب بر روی سرور دوم استفاده کرد چی؟ یعنی دو سرور با نامهای یکسان!

    درمورد exe هم فکر نکنم بتونم عملیش کنم! چون همون طور که گفتم باید این امکان رو هم داشته باشه که رو وب کار کنه در ضمن برنامه هم تقریبا آماده شده.
    البته جسارت نشه برنامه ای که گفتم اونقدرا هم برنامه نیستا!!! فقط همینطوری به ذهنم اومد که جلوی سوء استفاده رو از همین الان بگیرم!!!!!!!!!!
     
    نوشته شده توسط m1pfard در ‏1 اکتبر 2009
  10. Arash_Niazmand

    Arash_Niazmand Member

    ارسال‌ها:
    150
    تشکر شده:
    119
    امتیاز دستاورد:
    16
    در رابطه با نام سرور و دامنه باید بگم که این طور چک میشه که نام دامنه و کد محصول رو در یک usb قفل ذخیره میکنید .
    برنامه در صورتی که سرور قفلش باز بود کار خواهد کرد .

    در رابطه با exe ، باید بگم شما اگر برای برنامه فایل setup طراحی کرده باشید ، میتوانید دو وضیعت را به کاربر بدهید . نصب بر روی local یا وب .

    در این صورت میتونید فایل exe رو برای این برنامه بزارید . در ضمن دوست عزیز سیستم قفل گزاری و کد نویسی بر روی local فرق داره با وب پس نمیتونید یک تیپ خاص بنویسید و پاپلیش کنید .
    در رابطه با ساخت فایل exe که قرار بود یک aspx بسازه چند نکته هست که باید بگم .

    اگر می خوای قفل بزاری باید تنبلی رو بزاری کنار و خیلی از جاهای پروژه رو تغیر بدی .
    اگر مخوای همین طوری یک قفل بزاری بدون استانداردی که توضیح دادم پیش تر برای aspx می تونید
    فایل aspx رو باز کنید داخل آن یک سری string نوشته شده ... پس بهتر یک فایل بسازی که runTime اینا رو بنویسه و با پسونده aspx و aspx.cs ذخیره کنه .

    راستی اینکه کجا بریزه هم مهمه شما بصورت فیزیکی save نمی کنی بلکه یک سری متغییر پاس میدی که برای اجرا این متغییر ها لازم هست .

    بزار یک مثال بزنم . تا حالا شده یک کانکشن sql داشته باشی و نتونی بهش کانکت بشی ... حالا فکر کن مد دیباگ رو تو کنترل کنی و فایل تو هم به dll تبدیل شده باشه ... اگه کانکشن اشتباه باشه کاربر اگه خود کشی هم کنه نمیفهمه error برای چیه و نمی تونه تغیر بده ...

    و از همه این ها بگذریم باید ارزش برنامه ایی که ساختی رو بسنجی و بعد به همین مقدار شرو به قفل گذاری کنی . .
    باید ببینی آیا برنامه ارزش این رو داره که 72 ساعت یک اکیپ 5 نفره کار کنند تا این قفل رو بنویسی ..

    در هر صورت اگر سوالی هست من در خدمتم .
     
    نوشته شده توسط Arash_Niazmand در ‏1 اکتبر 2009
    m1pfard از این پست تشکر کرده است.
  11. MDP

    MDP Well-Known Member

    ارسال‌ها:
    1,540
    تشکر شده:
    1,477
    امتیاز دستاورد:
    113
    اااااااااااااااه !!!

    من 2 ساعت تایپ کردم این ADSL قطع شد پرید.حس دوباره نوشتنش نیست ولی راه حل من اینه :

    توی برنامت به یه DLL خاص مثل li.dllx رفرنس میدی!

    توی این DLL با هر روشی که به فکرت میرسه اسم دامین طرف رو دخیره میکنی!

    در حالت اولیه توی اون مثلا مقدار دمو گذاشتی

    وقتی برنامه رو میدی به کسی اون DLL رو خودت جنریت می کنی که نام دامین طرف توش باشه.

    بعد توی رویداد application_start ( توی Global.asax ) این مقدار رو با دامین طرف چک میکنی.اگه بود که ردیفه.نبود app_offline.htm رو بارگذاری می کنی.
     
    نوشته شده توسط MDP در ‏2 اکتبر 2009
    m1pfard و Arash_Niazmand از این پست تشکر کرده اند.
  12. m1pfard

    m1pfard Member

    ارسال‌ها:
    406
    تشکر شده:
    119
    امتیاز دستاورد:
    16
    بازم ممنون
    خوب اینم از شانس منه!!!!

    آرش خان روش شما خوبه ولی متاسفانه الان بدرد من نمی خوره چون تقریبا دارم پروژه رو تحویل میدم ولی در آینده حتما روش کار می کنم.

    مسعود خان با اجازه من از راه حل پیشنهادی شما استفاده می کنم!!!! ولی بازم یه سوال:

    اگه DLL رو Decompile کردن چی:green: یا بازم اگه طرف همه فایلها رو (از جمله همون DLL رو) به سرور دیگری با همون نام انتقال داد چی؟!!

    فکر کنم علاوه بر نام دومین باید مقادیر دیگری هم چک بشن (برای لوکال). یا باید حتما از قفل سخت افزاری (USB) استفاده کنم.

    یه روش هم که الان به نظرم رسید: برای اینکه هر دو امکان نسب رو به کاربر بدم (هم تو وب و هم تو لوکال) میشه قبل از چک کردن قفل (تو Application - start) اول قفل وب یا همون وب سرویس رو چک کنه اگه نشد قفل لوکال رو چک کنه و اگه اینبار هم نشه خطای قفل رو بده.

    بازم منتظر نظرات سبز شما هستیم....
     
    نوشته شده توسط m1pfard در ‏3 اکتبر 2009
  13. prg.akbarzadeh

    prg.akbarzadeh New Member

    ارسال‌ها:
    1
    تشکر شده:
    0
    امتیاز دستاورد:
    1
    بستگی داره نرم افزار تحت وب شما به چه زبانی باشد. شما می توانید اطلاعات سرور و یا ip رو از طریق نرم افزار خودتون استخراج و بر اساس آن قفل گذاری و کنتزل کنید که سرور عوض نشده باشه و یا محدود سازی بکنید بر روی ip خاص. توی شبکه های اینترانت هم قابل پیاده سازی هست فقط باید سرور ویندوزی باشه.
    من این کار رو انجام دادم اگر کسی تمایل داشت می تونم کمک کنم
    [email protected]
     
    نوشته شده توسط prg.akbarzadeh در ‏6 فوریه 2019

به اشتراک بگذارید