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

m1pfard

Member
سلام.
بعد از هزار سال بالاخره برگشتم خدمتتون!
اصل مطلب: میشه لطفا یه راهنمایی بفرمائید چطور میشه رو یه نرم افزار تحت وب قفل گذاشت؟ (سخت افزاری و یا نرم افزاری) یه برنامه که ممکنه رو وب (اینترنت) نصب بشه و یا می تونه لوکال (اینترانت) اجرا بشه.
ممنانم!!!
 
دوست من بازگشت شما رو تبریک می گم.

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

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

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

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

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

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

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

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

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

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

موفق و پیروز باشید .
 

sepidweb

Member
برای یک نرم افزار تحت وب؟؟
می شه برای این کار اولا یک وب سرویس مثلا در سایت خودتون ایجاد کنید مخصوص این کار.
بعد در نرم افزاری که نوشتید، هر بار که نرم افزار بالا میاد، یک بار این وب سرویس اجرا بشه، و بر اساس مقدار خاصی، مثلا IP بررسی بشه که نرم افزاری که در حال اجرا هست از شما خریداری شده هست یا نه. اگر نبود، نرم افزار load نشه.
برای مشتریانی هم که نرم افزار شما رو خریداری می کنند هم این کار باید انجام بشه که نام دامنه سایت خودشون رو به شما بدن تا اون رو توی لیست سایت های مجاز قرار بدید، و از طریق اون IP سایت اونها تایید شده باشه.
نکته ای هم که باید توجه کرد اینه که کد مربوط به این ماجرا به صورت کامپایل شده (مثلا یه DLL) به مشتری تحویل بشه که نتونه در اون تغییر ایجاد کنه.
همچنین از Dotfuscator یا یه همچین چیزی استفاده کنید که کد داخل DLL هم قابل بازیابی و ساخت مجدد نباشه.
 

m1pfard

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

ولی در کل به این نتیجه رسیدم که هنگام ارائه نرم افزار به مشتری باید نحوه استفاده اون هم مشخص بشه تا بشه در باره نوع قفل هم تصمیم گرفت.
 

m1pfard

Member
انشام چطور بود حال کردین؟! دلم نیومد ویرایشش کنم تا شما هم یه خورده بخندید. شرمنده!!!
 

sepidweb

Member
mac address روش خوبی نیست. چون برای virtual machine ها می شه هر mac address ای رو تعریف کرد! اونوقت اگر نرم افزار بیش از اندازه سنگین نباشه و بشه توی Virtual Machine اجراش کرد، با فعال کردن برای یک Mac Address تعریف شده، کارش تمومه.
حتی احتمال می دم در لینوکس بشه Mac رو دستی تعریف کرد! اونوقت برنامه ت رو Mono بالا میاد!
نمی دونم در این شرایط چه کاری می شه کرد. اما به نظر می رسه که local ها هم به هر حال معمولا به اینترنت دسترسی دارن.
حداقل اینه که هر بار که خواستن application رو راه بندازن، لااقل یه مدت کوتاهی با اینترنت تلفنی وصل بشن، تا بالا بیاد و verify بشه، بعد قطع کنند تا دفعه بعدی که نیاز به restart پیش بیاد.
انشات اونقدرها هم بد نبود واقعا! :wink:
 
باز هم از اینکه دوستانی فعال در این بخش می بینم خوشحالم .

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

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

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

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

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

موفق و پیروز باشید .
 

m1pfard

Member
ممنون ولی یه سوال
اگه از همون نام دامنه و سریال برای نصب بر روی سرور دوم استفاده کرد چی؟ یعنی دو سرور با نامهای یکسان!

درمورد exe هم فکر نکنم بتونم عملیش کنم! چون همون طور که گفتم باید این امکان رو هم داشته باشه که رو وب کار کنه در ضمن برنامه هم تقریبا آماده شده.
البته جسارت نشه برنامه ای که گفتم اونقدرا هم برنامه نیستا!!! فقط همینطوری به ذهنم اومد که جلوی سوء استفاده رو از همین الان بگیرم!!!!!!!!!!
 
در رابطه با نام سرور و دامنه باید بگم که این طور چک میشه که نام دامنه و کد محصول رو در یک usb قفل ذخیره میکنید .
برنامه در صورتی که سرور قفلش باز بود کار خواهد کرد .

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

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

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

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

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

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

در هر صورت اگر سوالی هست من در خدمتم .
 

MDP

Well-Known Member
اااااااااااااااه !!!

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

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

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

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

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

بعد توی رویداد application_start ( توی Global.asax ) این مقدار رو با دامین طرف چک میکنی.اگه بود که ردیفه.نبود app_offline.htm رو بارگذاری می کنی.
 

m1pfard

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

خوب اینم از شانس منه!!!!

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

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

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

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

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

بازم منتظر نظرات سبز شما هستیم....
 

prg.akbarzadeh

New Member
بستگی داره نرم افزار تحت وب شما به چه زبانی باشد. شما می توانید اطلاعات سرور و یا ip رو از طریق نرم افزار خودتون استخراج و بر اساس آن قفل گذاری و کنتزل کنید که سرور عوض نشده باشه و یا محدود سازی بکنید بر روی ip خاص. توی شبکه های اینترانت هم قابل پیاده سازی هست فقط باید سرور ویندوزی باشه.
من این کار رو انجام دادم اگر کسی تمایل داشت می تونم کمک کنم
[email protected]
 

rahaomidi

Member
برای قفل گذاری بر روی نرم افزار تحت وب، چندین روش و تکنیک امنیتی وجود دارد که می‌توانید استفاده کنید. البته هر روشی باید با توجه به نوع و پیچیدگی نرم افزار و نیازهای امنیتی خاص شما انتخاب شود. در ادامه، چندین روش رایج برای قفل گذاری نرم افزار تحت وب را بررسی خواهیم کرد:

1. استفاده از رمزنگاری HTTPS: اطمینان حاصل کنید که ارتباطات بین مرورگر و سرور شما از طریق پروتکل HTTPS انجام می‌شود. این روش از طریق استفاده از گواهینامه SSL/TLS، اطلاعات را در طول انتقال محافظت می‌کند و از حملات MITM (Man-in-the-Middle) جلوگیری می‌کند.

2. اعتبارسنجی و احراز هویت: برای قفل گذاری نرم افزار تحت وب، باید از مکانیزم‌های اعتبارسنجی و احراز هویت قوی استفاده کنید. این شامل استفاده از رمزنامهای قوی، فرآیندهای تأیید دو مرحله‌ای (مانند کد ارسال شده به تلفن همراه) و سیستم‌های مدیریت دسترسی مبتنی بر نقش است.

3. حفاظت در برابر حملات نفوذ: بررسی و اعمال تکنیک‌های امنیتی برای جلوگیری از حملات نفوذ مهم است. می‌توانید از فایروال‌ها، جلوگیری از حملات XSS (Cross-Site Scripting) و CSRF (Cross-Site Request Forgery)، فیلترهای ورودی صحیح و بررسی منابع خارجی استفاده کنید.

4. به‌روزرسانی مداوم: مطمئن شوید که نرم‌افزار و تمامی کتابخانه‌ها و فریمورک‌های مورد استفاده در آن به‌روزرسانی شده‌اند. به‌روزرسانی‌ها عموماً شامل رفع آسیب‌پذیری‌ها و بهینه‌سازی‌های امنیتی است.

5. استفاده از تکنولوژی‌های امنیتی مانند JSON Web Tokens (JWT) برای مدیریت و احراز هویت کاربران.

6. محدود کردن دسترسی‌ها: تعیین و مدیریت سطوح دسترسی کاربران به موارد مختلف نرم‌افزار تحت وب می‌تواند از امنیت آن محافظت کند. فقط به کاربران مجاز دسترسی‌های مورد نیاز را ارائه دهید و دسترسبه موارد حساس را محدود کنید.

7. ذخیره رمز‌ها به‌صورت رمزنگاری شده: اگر برای ورود به نرم‌افزار نیاز به رمز عبور دارید، مطمئن شوید که رمز‌ها به‌صورت رمزنگاری شده در پایگاه داده ذخیره می‌شوند. استفاده از الگوریتم‌های رمزنگاری قوی مانند bcrypt یا Argon2 را در نظر بگیرید.

8. آزمون امنیتی: مرتباً آزمون‌های امنیتی را بر روی نرم‌افزار خود اجرا کنید تا آسیب‌پذیری‌های ممکن را شناسایی و رفع کنید. از آزمون‌هایی مانند آزمون نفوذ (Penetration Testing)، آزمون اگرگیشن (Aggression Testing) و آزمون آسیب‌پذیری (Vulnerability Testing) استفاده کنید.

9. ذخیره‌سازی مناسب و نگهداری پشتیبان‌ها: مطمئن شوید که داده‌های مهم شما به‌صورت مناسب در پایگاه داده ذخیره می‌شوند و پشتیبان‌های منظم از اطلاعات ایجاد می‌کنید. این کار به شما در صورت وقوع حوادث ناگوار مانند حملات سایبری یا خرابی سرور کمک خواهد کرد.

بهتر است همیشه با متخصصان امنیتی و تیم فنی خود مشورت کنید تا روش‌ها و تکنیک‌های مناسب برای نرم‌افزار خاص شما مشخص شود و بهترین سطح امنیت را برای آن فراهم کنید.
 

جدیدترین ارسال ها

بالا