PDA

View Full Version : سوال: امنیت در سیلور لایت



M.Moeini
یک شنبه 25 مهر 1389, 00:08 صبح
سلام دوستان عزیر
من برنامه ای با ASP.NET دارم که تو سرور مشتری هام نصب میکنم یک مشکل اساسی درام که نتونستم را حلی براش پیدا کنم اونم این که سورس برنامه من دست مشتری هام میره و نمیتونم از سورسم محافظت کنم یا حتی کمه عبور بانک اطلاعاتیمو از مشتری مخفی کنم
گفتم شاید بتونم با سیلور این کار رو انجام بدم که ظاهراً اون هم مثل سایر برنامه هایی که تحت دات نت هست دی کامپایل می شه و امنیت درست حسابی نداره
متاسفانه تخصص درست حسابی هم تو امنیت ندارم که بتونم گلیم خودم از آب بیرون بکشم. خواستم اگه ممکنه یک راهی به من نشون بدید که بتونم مشکلم رو حل کنم.

majid325
یک شنبه 25 مهر 1389, 10:14 صبح
در هر صورت اگه فایلی دست کسی باشه بسته به دانش اون شخص میتونه از محتویاتش سر در بیاره ، تنها کاری که من و شما میتونیم بکنیم اینه که کار اونا رو سخت تر کنیم

در سیلورلایت امنیت بیشتری را نسبت به ASP میشه تامین کرد ، به طور مثال به دلیل اینکه خروجی نهایی به صورت اسمبلی های مورد نیاز در قالب یک فایل Zap است و میتوان ابزار های obfuscator جهت نا خوانا کردن کد استفاده کرد و پیشنهاد دیگه این هست که String های خود را به هیچ وجه در اسمبلی قرار ندهید و در xml به صورت Hash یا انواع دیگر encrypter استفاده کنی.

M.Moeini
یک شنبه 25 مهر 1389, 10:54 صبح
خب حرف شما درست است ولی الگوریتم باز کردن آن هش در سورس برنامه من موجود است مگر اینکه در سیلور باز شود و کد سیلور هم قابل دیکامپایل نباشد

taghvajou
دوشنبه 26 مهر 1389, 00:09 صبح
سلام به همه
هش (Hash) یه پروسه یک سویه است و داده هش شده رو نمیشه آن-هش کرد! الگوریتم هش جوریه که به ازای یه ورودی مشخص یه خروجی منحصر بفرد مشخص میده؛ حالا برای استفاده از خروجی حتما باید یه مقدار رو دوباره به الگوریتم داد و خروجی دوم را با خروجی اصلی مقایسه کرد که اگه درست بود پس حتما ورودی ها هم یکی بودند. (البته میدونم که اساتید با این مفاهیم آشنا هستند، فقط برای اطلاع دوستان تازه کار خدمتتون عرض کردم.)
پس دقیقا بنا بر سفارش دوست خوبمون آقا مجید، قبل از ارسال در شبکه (برای جلوگیری از استراغ سمع) یا قبل از ذخیره در فایل یا پایگاه داده بهتره رشته های امنیتی مثل رمز عبور هش بشند، تا حتی به قول شما اگه کسی بدست بیاره مقدار هش شده رو نمیتونه ازش استفاده ای کنه!
پس شما اصلا نگران لو رفتن الگوریتم هش نباش!

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

بنده خودم از هش الگوریتم SHA1 از نیم اسپیس کریپتوگرافی (System.Security.Cryptography) استفاده میکنم. از کلاس اس اچ ای 1 یه نمونه درست کنین، بعد رشته مورد نظر رو به آرایه بایت تبدیل کنین و این آرایه بایت رو به عنوان ورودی به متد کامپیوت اون نمونه ای که ساختین بدین و خروجی بدست اومده میشه مقدار هش شده مورد نظر:



System.Security.Cryptography.SHA1 passHash = new System.Security.Cryptography.SHA1Managed();

byte[] result = passHash.ComputeHash(passBytes);




در انتها بایت بایت خروجی ها رو باهم مقایسه کنیم و در صورت هر گونه عدم تساوی، مقدار رو رد می کنیم.

M.Moeini
سه شنبه 27 مهر 1389, 00:31 صبح
سلام به همه دوستان
مخصوصاً دوست خوبم آقای تقوی جو که به سوالات ما جواب میده
مشکلی که من مطرح کردم با الگوریتم های یک طرفه حل نمیشه. من دوتا مشکل مطرح کردم
این که برنامه من رو مشتری میبینه! دستکاری می کنه! هر قسمتی از اون رو که بخواد تغییر میده و یا به اون اضافه می کنه! و سوال دوم این بود که مثلاً یک چیزی مثل یوزر نیم و پسورد ورود به بانک اطلاعاتیم رو از چجوری و کجا بنویسم که دست مشتری نیوفته! اگه اونو هش (md5) کنم که دیگه نمیتونم با اون تو دیتابیس لوگین کنم

فکر می کنم اگه دوستان همفکری کنند و چند تا راه حل مناسب برای این کار ارایه بشه مشکل خیلی ها که برنامه وب بیسشون تو سروری غیر اینترنت بالامیاد حل بشه
من خودم چند تا راه حل مثل اینکه خودم یک iis بنویسم یا اینکه برنامه با یک سرویس بصورت tcp-ip ارتباط برقرار کنه و رمز رو از اون بپرسه به ذهنم خورد ولی دیدم این مشکل عمومیه و ممکنه دوستان اهل مطالعه و با سواد تر از ما یک راه حل های کامل تری پیدا کنند.
به هر حال از همه دوستان خواهش می کنم در این تاپیک شرکت کنند و تجربیاتشون رو در اختیار جمع بگزارند.
با تشکر:تشویق:

majid325
سه شنبه 27 مهر 1389, 11:21 صبح
با دنبال کردن این تاپیک (http://www.barnamenevis.org/forum/showthread.php?t=120547) میتونید ادامه مطلب رو پیگری کنید

M.Moeini
چهارشنبه 28 مهر 1389, 22:29 عصر
سلام به آقا مجید و بقیه دوستان
من تاپیکی که گفتید را مطالعه کردم چیزای خوبی رو یاد گرفتم ولی فکر می کنم کسی مشکل من رو درست متوجه نشد
:متعجب::متعجب::متعجب::متعجب:
:متعجب::متعجب::متعجب::متعجب:
:متعجب::متعجب::متعجب::متعجب:
:متعجب::متعجب::متعجب::متعجب:
مشکل من این نیست که چطور و با چه الگوریتمی یوزرنیم و پسورد کاربر رو تو دیتابیس مخفی کنم و یا جلوی اینجکشن رو بگیرم :متعجب:
سوال من اینه که چطور می تونم کانکشن استرینگ رو از مشتریم که برنامه وب بیس من تو سرورش نصبه مخفی کنم؟ اگه از الگوریتم های یکطرفه اسفاده کنم که دیگه کانکشن استرینگی نیست که باهاش به دیتابیس وصل شم و اگه از الگوریتم های دوطرفه استفاده کنم چه متقارن و چه نامتقارن هم الگوریتم ، هم سورس و هم کلید عمومی و خصوصی همه و همه در دست مشتری است یک راه حل جدید می خوام