# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > امنیت در نرم افزار و برنامه نویسی > سوال: جلوگیری از فاش شدن username و password دیتابیس آنلاین در سورس برنامه

## farhang.sz

سلام خدمت همه اساتید محترم.
من یک برنامه تحت ویندوز با #C نوشتم که باید یک سری اطلاعات رو به دیتابیسی آنلاین ارسال و دریافت کنه.
از اونجایی که امنیت برنامه های دات نت ضعیفه ، می خواستم ببینم چه راهی وجود داره که حداقل اطلاعاتی مثل آدرس سرور ، اسم دیتابیس ، username و password لو نره!
سورس اصلا مهم نیست چون برنامه خاصی نیست ولی امنتیت دیتابیس خیلی برام مهم...
از SmartAssembly 6 هم استفاده کردم...

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

خیلی ممنون

----------


## butterfly8528

سلام .
اطلاعات مهم برنامه را مانند آدرس و User & Pass دیتابیس را به صورت کد شده در برنامه قرار دهید ، برای امنیت بیشتر کلید الگوریتم رمز نگاری این اطلاعات رو هم به صورت کد گذاری شده توسط یک الگوریتم رمزنگاری دیگر به تابع رمز گشایی ارسال نمایید .
موفق باشید  :لبخند: .

----------


## farhang.sz

دوست عزیز به خاطر اطلاعاتی که دادین خیلی ممنون ، حتما از 2-3 دو تا الگوریتم رمزگذاری استفاده می کنم.
فقط اگه برنامه با دیباگر اجرا بشه چی؟ در این حالت میشه حتی اطلاعات خام  user و pass رو بعد از کدگشایی هم مشاهده کرد :( 
برای این مشکل راه حلی وجود داره؟

----------


## Nima NT

راهکار 100% ای وجود نداره که بشه پسورد رو امن کرد ولی سعی کنید تا میتونید از الگوریتم های مطمئن استفاده کنید و استفاده از مبهم سازهای دات نتی رو هم فراموش نکنید ، ولی به عنوان یه پیشنهاد میتونید یه اتصال SSL با یه وب سرویس داشته باشید که مثلا" با دریافت نام کاربری پسورد رو از پایگاه داده سمت سرور بخونه و به صورت کد شده ( رمزنگاری کلید عمومی ) به برنامه کلاینت ارسال کنه اینطوری بهترین راه Sniff کردن پکت های ارسالی و دریافتی و دیکد کردن اونهاست که حداقل میتونید از این بابت خیالتون راحت باشه که کسی که بخواد از برنامه سوء استفاده کنه علاوه بر اینکه کرکر باید باشه هکر هم باید باشه :)

پیوست : میتونید از یه روش احراز هویت هم استفاده بکنید که که برنامه کلاینت یه فایل رمز شده که حاوی اطلاعات هست رو به سرور ارسال کنه و سرور در صورتی که موفق به رمزگشایی فایل بشه ( از معتبر بودن کلاینت اطمینان حاصل کنه ) پرمیژن های لازم رو به برنامه بده اینطوری سرور در مورد Shell Upload آسیب پذیره ولی اون هم راهکارهای سمت سرور و ... مربوط به خودش رو داره ولی میتونه به عنوان یه روش پایه و ساده استفاده بشه

----------


## farhang.sz

بابت روش های خوبی که گفتید خیلی ممنونم  :لبخند: 
اینا بعضی هاش خیلی حرفه ای شد باید حتما روشش رو یاد بگیرم و اجرا کنم توی برنامه...

من یه بار دیگه یه توضیحاتی بدم ، برنامه تحت ویندوز هست و به یک دیتابیس sql server با دستورات ساده ی موجود در دات نت متصل میشه.الان روش کارم اینه که اطلاعات دیتابیس شامل یوزر ، رمز ، آدرس سرور و نام دیتابیس هنگام شروع برنامه در یک فایل رمزنگاری شده از روی ftp دانلود میشه و توی خود برنامه هم ذخیره نمیشه....
به هر حال این اطلاعات وقتی موقع اجرای برنامه وارد برنامه بشه با دیباگر ها میشه بهشون دسترسی داشت.
در بدترین حالات که این اطلاعات لو بره ، چه روشی هست که سرور و دیتابیس به همین راحتی با اون یوزر و پسورد لو رفته باز نشه !؟ مثلا همین روشی که توی پیوست ذکر کردید رو امکانش هست توضیح بدید؟
منظورم اینکه که من چه طوری میتونم قبل از اینکه به سرور لاگین کنم یک فایل بفرستم توی دیتابیس تا برنامه احراز هویت بشه... ؟ :(
این برنامه الان هیچ وب سرویسی نداره و توی سرور که کلا یه دیتابیس هست و کلایت هم همین برنامه هست که قراره در اختیار افراد نسبتا زیادی قرار بگیره...  :افسرده: 

خـــــــــــــــــــــیلی  یی لطف می کنید اگه اطلاعات کامل تری به من بدید... با تشکر

----------


## Nima NT

فکر میکنم این مطلب کمکتون کنه
http://msdn.microsoft.com/en-us/libr...28v=sql.105%29

----------


## tooraj_azizi_1035

خوب شما باید Connection String رو محافظت کنی. این کار باعث میشه قسمت های مهم app.config رمز بشه. در ضمن امنیت برنامه هایی مثل دات نت از طریق  Dotfuscator میتونه در برابر حملات هکرها تامین بشه.
http://msdn.microsoft.com/en-us/library/89211k9b.aspx

----------


## Nima NT

> خوب شما باید Connection String رو محافظت کنی. این کار باعث میشه قسمت های مهم app.config رمز بشه. در ضمن امنیت برنامه هایی مثل دات نت از طریق  Dotfuscator میتونه در برابر حملات هکرها تامین بشه.
> http://msdn.microsoft.com/en-us/library/89211k9b.aspx


تاثیر چندانی نداره چون نهایتا" میشه کل کد مبهم شده رو به حالت اول برگردوند

----------


## barnamenevisforme

سلام
حتی فایل config که به صورت encrypt در اومده؟

----------


## jadidian

ببخشید مشکل شما حل شد ؟ راهی پیدا کردید ؟

----------


## علیرضا حسن زاده

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

----------


## Nima NT

> روش مطمئن تر از روش قبلی هم یه سرور و کلاینت برایه برنامتون پیاده سازی کنید مثلا مثل یه برنامه چت که هر کاربر با وارد کردن کلمه عبور و نام کاربری بتونهبه سرور شما وصل بشه و برنامه سرور شما مابین کاربر و دستابیس قرار بگیره ودر خواستهای کاربر رو بگیره و اونها رو از دیتابیس بخونه براش در قالب های دلخواه ارسال کنه در این حالت میشه گفت امینت بیشتری میتونید بدست بیارید البته بازم نه امنیت کامل ولی به نظرم بیشترین امینت


اینکار سربار بسیار زیادی رو روی سرور ایجاد میکنه ؛ منطقی نیست...

----------


## hamid59022

> خوب شما باید Connection String رو محافظت کنی. این کار باعث میشه قسمت های مهم app.config رمز بشه. در ضمن امنیت برنامه هایی مثل دات نت از طریق  Dotfuscator میتونه در برابر حملات هکرها تامین بشه.
> http://msdn.microsoft.com/en-us/library/89211k9b.aspx


سلام ببخشيد روش استفاده از Dotfuscator از كجا بايد پيدا كرد

----------


## Securebit

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

----------


## cmsdqq2

> سلام .
> اطلاعات مهم برنامه را مانند آدرس و User & Pass دیتابیس را به صورت کد شده در برنامه قرار دهید ، برای امنیت بیشتر کلید الگوریتم رمز نگاری این اطلاعات رو هم به صورت کد گذاری شده توسط یک الگوریتم رمزنگاری دیگر به تابع رمز گشایی ارسال نمایید .
> موفق باشید .




دوستان سلام، در خصوص این موضوع سوالی داشتم.

فرض کنیم که میخوایم به دیتابیس هاست به صورت ریموت متصل شیم. در کانکشن استرینگ Username و Pass رو میخوایم قرار میدیم و به دیتابیس وصل میشیم. سوال اینجاست که چطور از username و pass حفاظت کنییم؟

*گفته شده با رمزنگاری این دو رشته

*
سوال اینجاست که لازم هست که کلید در برنامه تعریف شده باشه. چطور باید از کلید محافظت کرد؟

*گفته شده با رمزنگاری کلید

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

برای این موضوع به عنوان مثال اگر وب سرویسی رو از وب سایت های ارائه کننده بگیریم و بخوایم از برنامه که فرضاً با #C نوشته شده، به وب سرویس متصل بشیم چه کاری باید انجام بدیم؟ - به عنوان مثال وب سرویس ارسال پیامک برای فعالسازی پیامکی توسط کاربر-

----------


## ASKaffash

سلام
رمزنگاری کردن ConnectionString تنها تا زمانی که کد قابل DeObfuscate شدن باشد فایده ای ندارد دوستان می گویند وب سرویس خوب یک برنامه نویس بخش سورس Call کردن وب سرویس را از کد برنامه DeObfuscate شده استخراج می کند و تمام شرایط را شبیه سازی میکند در یک کلام باید راه حلی را ارائه دهید که فرض بر این باشد که سورس در اختیار نفوذگر است در غیر اینصورت هیچ فایده ای ندارد حالا می خواهد وب باشد یا Win باشد

----------


## cmsdqq2

> سلام
> رمزنگاری کردن ConnectionString تنها تا زمانی که کد قابل DeObfuscate شدن باشد فایده ای ندارد دوستان می گویند وب سرویس خوب یک برنامه نویس بخش سورس Call کردن وب سرویس را از کد برنامه DeObfuscate شده استخراج می کند و تمام شرایط را شبیه سازی میکند در یک کلام باید راه حلی را ارائه دهید که فرض بر این باشد که سورس در اختیار نفوذگر است در غیر اینصورت هیچ فایده ای ندارد حالا می خواهد وب باشد یا Win باشد



بنده هم با این موضوع موافقم. این که باید فرض ما بر این باشه که سورس کد حداقل به صورت Read Only در اختیار نفوذگر هست؛ اما مسئله اینجاست، راه حل چیست؟

به عنوان مثال برای مشخص کردن رمزعبور و نام کاربری وب سرویس و ...

----------


## ASKaffash

سلام
من در یک پروژه از توکن سخت افزاری استفاده کردم و کلید رمزنگاری جهت بازگشائی رمز را از درون قفل خواندم اینطوری هر کس که یک قفل معتبر داشته باشد ConnectionString را خواهد داشت (موقع درست کردن کانکشن از کلید درون توکن Encrypt کردم روش رمزنگاری هم شخصی بود و برای فایل رمزنگاری هم CheckSum گذاشتم)

----------


## Felony

> سلام
> من در یک پروژه از توکن سخت افزاری استفاده کردم و کلید رمزنگاری جهت بازگشائی رمز را از درون قفل خواندم اینطوری هر کس که یک قفل معتبر داشته باشد ConnectionString را خواهد داشت (موقع درست کردن کانکشن از کلید درون توکن Encrypt کردم روش رمزنگاری هم شخصی بود و برای فایل رمزنگاری هم CheckSum گذاشتم)


1. استفاده از قفل سخت افزاری یه سری نکات داره که از Guide های قفل/تجربه به دست میاد و باید رعایت بشه
2. از قفل سخت افزاری که Emulator ش موجوده نباید استفاده کرد که تعداد انگشت شماری از اونها اینطور هستند
3. استفاده از روش رمز نگاری شخصی نشون میده که اصول پایه امنیت رو رعایت نکردین. رمزنگاری شخصی تو این دوره زمونه معنی نداره ضمن اینکه متنی که نوشتین خیلی واضح نیست، اگر درست متوجه شده باشم و منظورتون واقعا همون ConnectionString دیتابیس باشه که هیچ ... !!!

* تجربه من به شخصه و خیلی از دوستانی که با این ها سر و کله زدن نشون میده استفاده نکردن ازشون بهتر از استفاده کردنشونه. درسته که بستگی به سناریو و نهوه استفاده داره ولی به شخصه پیاده سازی امنیت برنامه به صورت نرم افزاری رو ترجیح میدم به قفل سخت افزاری و اگر اصرار به استفاده از این قفل ها باشه باید جزء کوچیکی از مکانزیم های امنیتی باشن نه پایه و شالوده امنیت برنامه.
* اکثر اوقات شنیدن اینکه فلان برنامه قفل سخت افزاری داره برای کرکرها خبر خوشایندی هست :))

----------


## ASKaffash

سلام
فکر کنم دقیق کلا پست ها را مطالعه نکردید کل هدف این است که سورس کامل در اختیار نفوذ اگر است و حتی الگوریتم رمزنگاری (به هر طریقی بدست آورده) انوقت روش نرم افزاری اشتباه مطلق است ولی روش استفاده از توکن (من از کیا استفاده کردم) فقط کلید رمزنگاری را برای رسیدن به ConnectionString شامل می شود حالا چطوری کلید لو میرود ؟

----------


## cmsdqq2

> سلام
> فکر کنم دقیق کلا پست ها را مطالعه نکردید کل هدف این است که سورس کامل در اختیار نفوذ اگر است و حتی الگوریتم رمزنگاری (به هر طریقی بدست آورده) انوقت روش نرم افزاری اشتباه مطلق است ولی روش استفاده از توکن (من از کیا استفاده کردم) فقط کلید رمزنگاری را برای رسیدن به ConnectionString شامل می شود حالا چطوری کلید لو میرود ؟




سلام
به نظر شما و دیگر دوستان قفل های شرکت پیام پرداز مطمئن *ترین* هستند؟ جز پیام پرداز چه شرکت دیگه ای خوب هست؟


ممنونم

----------


## cmsdqq2

> سلام
> من در یک پروژه از توکن سخت افزاری استفاده کردم و کلید رمزنگاری جهت بازگشائی رمز را از درون قفل خواندم اینطوری هر کس که یک قفل معتبر داشته باشد ConnectionString را خواهد داشت (موقع درست کردن کانکشن از کلید درون توکن Encrypt کردم روش رمزنگاری هم شخصی بود و برای فایل رمزنگاری هم CheckSum گذاشتم)



کلیدها... من همچنان این مشکل رو دارم و هنوز به نتیجه ی درستی نرسیدم.

یک رشته رو رمز کردیم. نیاز داریم که رمزگشایی کنیم، طبیعتاً باید رمزنگاری دو طرفه استفاده کنیم، کلید رو کجا باید بذاریم؟؟

واقعاً من اساساً گیر کردم. بعضی از دوستان میگن کلید رو هم رمز کنید، خب اون رشته کلید رمز شده هم واسه خودش یک کلیدی داره.

*چه باید کرد؟؟*

----------


## ASKaffash

سلام
1- کلید Encrypt کردن داخل دانگل سخت افزاری باشد از داخل آن بخوانیم و Decrypt انجام شود (حتما" دوطرفه است)
2- من در یک سازمان بزرگ دولتی کار میکنم توکن Kia دانگل محکمی است تقریبا بالای 4000 دانگل داریم و حدود 8 سال

----------


## cmsdqq2

> سلام
> 1- کلید Encrypt کردن داخل دانگل سخت افزاری باشد از داخل آن بخوانیم و Decrypt انجام شود (حتما" دوطرفه است)
> 2- من در یک سازمان بزرگ دولتی کار میکنم توکن Kia دانگل محکمی است تقریبا بالای 4000 دانگل داریم و حدود 8 سال




بسیار ممنونم

راهی جز دانگل سخت افزاری در نظر دارید؟

----------


## ASKaffash

سلام
بنظرم فقط روش سخت افزاری راه حله

----------


## علیرضا حسن زاده

دوستان عزیز همیشه توجه داشته باشین وقتی سورس دسته کرکر باشه همه روش های محافظتی عملا بی فایده هست حالا میخواد توکن باشه یا هر چی
مثلا شما وقتی از تکن سخت افزاری استفاده میکنی خب یه جایه برنامه داری اون کلید رو به هر روشی که خودت میدونی میخونی تا اطلاعات رو دیکد کنی وقتی کرکر این روش رو تو سورس کدشما میبینه طبیعتا میتونه همون کاری که شما انجام دادی روشبیه سازی کنه و کار قفل گذاری و رمزگذاریه شما رو بیهوده کنه و بقیه روش ها هم به همین ترتیب
تنها راه مطمنتر از روش های گفته شده همون وب سرویس هست که کاربر با وارد کرد نام کاربری و پسوردش بتونه اطلاعات بگیره یا بده حالا در این حالت اگه سورس برنامه رو کرکر هم ببینه دسترسیبه اطلاعات براش به مراتب سخت تره چون کلید از سرور ارسال میشه اونم با احراز هویت کاربر و تا زمانی که نام کاربری و پسورد لو نره خیلی سخت میشه اطلاعات رودیکد کرد
اما در کل هیچ وقت ۱۰۰ درصد رو هیچ روشی حساب نکنید به قول اقای نیکجو کسی اگه هکر باشه برای دوز زدن این روش ها هم راه های زیادی هست

----------


## ASKaffash

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




> دوستان عزیز همیشه توجه داشته باشین وقتی سورس دسته کرکر باشه همه روش های محافظتی عملا بی فایده هست حالا میخواد توکن باشه یا هر چی
> مثلا شما وقتی از تکن سخت افزاری استفاده میکنی خب یه جایه برنامه داری اون کلید رو به هر روشی که خودت میدونی میخونی تا اطلاعات رو دیکد کنی وقتی کرکر این روش رو تو سورس کدشما میبینه طبیعتا میتونه همون کاری که شما انجام دادی روشبیه سازی کنه و کار قفل گذاری و رمزگذاریه شما رو بیهوده کنه و بقیه روش ها هم به همین ترتیب
> تنها راه مطمنتر از روش های گفته شده همون وب سرویس هست که کاربر با وارد کرد نام کاربری و پسوردش بتونه اطلاعات بگیره یا بده حالا در این حالت اگه سورس برنامه رو کرکر هم ببینه دسترسیبه اطلاعات براش به مراتب سخت تره چون کلید از سرور ارسال میشه اونم با احراز هویت کاربر و تا زمانی که نام کاربری و پسورد لو نره خیلی سخت میشه اطلاعات رودیکد کرد
> اما در کل هیچ وقت ۱۰۰ درصد رو هیچ روشی حساب نکنید به قول اقای نیکجو کسی اگه هکر باشه برای دوز زدن این روش ها هم راه های زیادی هست

----------


## علیرضا حسن زاده

> سلام
> به نظر شما اگر الگوریتم کدکردن باشد ولی کلید دیکدکردن نباشد می توان به رشته اصلی رسید ؟


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

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

----------


## ASKaffash

سلام
موضوع اصلی اینجاست که کلید درون یک دانگل است و شما دانگل را ندارید (ولی کل سورس برنامه را دارید) حالا بازهم می توان دیکد کرد؟

----------


## علیرضا حسن زاده

> سلام
> موضوع اصلی اینجاست که کلید درون یک دانگل است و شما دانگل را ندارید (ولی کل سورس برنامه را دارید) حالا بازهم می توان دیکد کرد؟


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

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

----------


## MiladWorkShop

درود

زمانی که قصد دارید به صورت آنلاین تبادل اطلاعات داشته باشید نباید هیچ اطلاعاتی از دیتابیس رو سمت کلاینت قرار بدید!

بهترین روی این هست که برای اینکار یک وب سرویس بنویسید, یه عنوان مثال یک وب سرویس بنویسید که بیاد واسطه بین نرم افزار و سرور بشه, یعنی نرم افزار اطلاعات لازم رو ارسال میکنه به وبسرویس, وبسرویس هم چون روی سرور شما پیاده سازی شده قطعاً کسی نمیتونه ازش اطلاعاتی مثل نام کاربری, کلیمه عبور و ...رو استخراج کنه, و وب سرویس هم بعد از اینکه اطلاعات رو به دیتابیس ارسال کرد, پاسخ اون رو به نرم افزار شما ارسال میکنه

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

----------


## ASKaffash

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




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

----------


## ASKaffash

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





> درود
> 
> زمانی که قصد دارید به صورت آنلاین تبادل اطلاعات داشته باشید نباید هیچ اطلاعاتی از دیتابیس رو سمت کلاینت قرار بدید!
> 
> بهترین روی این هست که برای اینکار یک وب سرویس بنویسید, یه عنوان مثال یک وب سرویس بنویسید که بیاد واسطه بین نرم افزار و سرور بشه, یعنی نرم افزار اطلاعات لازم رو ارسال میکنه به وبسرویس, وبسرویس هم چون روی سرور شما پیاده سازی شده قطعاً کسی نمیتونه ازش اطلاعاتی مثل نام کاربری, کلیمه عبور و ...رو استخراج کنه, و وب سرویس هم بعد از اینکه اطلاعات رو به دیتابیس ارسال کرد, پاسخ اون رو به نرم افزار شما ارسال میکنه
> 
> امن ترین روش ارتباط نرم افزاری هایی که کلاینت به سرور متصل میشه همین پیاده سازی وبسرویس به منظور واسطه گری تبادل اطلاعات به صورت امن و محافظت شده در چهارچوب های تعریف شده هست

----------

