واضح آرشیو وب فارسی:سایت ریسک: View Full Version : تنظیم کانکشن استرینگ بعد از کامپایل با حفظ امنیت Payman_6225-09-2009, 04:01 PMسلام. میخوام با استفاده از روشی کانکشن استرینگ رو بعد از کامپایل برنامه ست کنم. تا مجبور نشم هر سری دوباره برنامه رو کامپایل کنم و ستاپ بسازم. روش هایی مثل تنظیم در setting یا خوندن از app.config بعد از تغییر سرور نیاز به کامپایل مجدد دارن. من میخواستم از فایل های udl استفاده کنم. ولی udl هم امنیت بالایی نداره و کاربر اگه دستکاریش کنه ارتباط با سرور قطع میشه. اما امنیت برای من خیلی مهمه. جایی خوندم میشه فایل های udl رو از دسترسی غیر مجاز حفظ کرد. کسی اطلاعی داره؟ در کل چه روشی رو پیشنهاد میکنید؟ MTPROG26-09-2009, 09:25 AMمیخوام با استفاده از روشی کانکشن استرینگ رو بعد از کامپایل برنامه ست کنم. تا مجبور نشم هر سری دوباره برنامه رو کامپایل کنم و ستاپ بسازم یعنی شما Connection string برنامه رو تو یک خط ثابت مینویسید و هر وقت بخواید تغییر بدید باید سورس رو عوض کنید؟ دقیقا نمیدونم میخواهید چکار کنید ولی من خودم از یه کلاس برای بدست آوردن Connection string استفاده میکنم چندین پارامتر میگیره و بر اساس اون Connection string رو میسازه و دستورات مربوطه جهت اتصال از اون استفاده میکنن اگر هم بعضی شرایط سرور و شبکه تغییر کرد مشکلی پیش نماد چون کلاس مربوطه با شرایط جدید دستور جدید میسازه اگر منظور شما چیز دیگه ای هستش لطفا توضیح بدید Payman_6226-09-2009, 05:10 PMسلام. وقتی نام و آدرس سرور تغییر میکنه کلاس شما چطور کانکشن جدید رو میسازه؟ یعنی چطور نام سرور رو گیر میاره؟ بالاخره باید از جایی از بیرون بهش داده بشه. shalineh26-09-2009, 07:28 PMمیتونی تمام پارامترهای لازم برای کانکشن استرینگ رو در یک فایل تکست معمولی بریزی ( بصورت کد شده ) و سپس در هنگام لود برنامه ، این فایل رو بخونی و پارامترها رو در کانکشن استرینگ وارد کنی. کاری که من در برنامه شهر شکلک کردم و اونو در یک فایل تکست کد شده و در یک جای مخفی قرار دادم. فقط کافیه این تکست رو تغییر بدم و دیگه نیاز به کامپایل نداره. Payman_6226-09-2009, 08:46 PMسلام. فایل udl برای همین کار هست که گرفتن اطلاعات سرور و دیتابیس رو کپسوله کرده. اما مشکل من عدم امنیت این فایل هست. به راحتی قابل ویرایش هست و در صورت تغییر محتوای فایل ارتباط با سرور قطع میشه. MTPROG27-09-2009, 09:06 AMوقتی نام و آدرس سرور تغییر میکنه کلاس شما چطور کانکشن جدید رو میسازه؟ یعنی چطور نام سرور رو گیر میاره؟ بالاخره باید از جایی از بیرون بهش داده بشه. موقع ورود به نرم افزار فرم LogIn میاد و اونجا اطلاعات مورد نیاز توش هست http://www.mihanupload.com/images/co31eo1kbcxmuirc8vq.jpg اطلاعات log in رو هم تو یه فایل ذخیره میکنیم اگر می خواید کسی متوجه اون فایل نشه پسوند اونو عوض کنید مثلا Info.dll برنامه هیچ مشکلی با خوندن یا نوشتن توش نداره و کاربر متوجه نمیشه که این فایل یک dll نیست مثلا من قبلا برای برنامه های بانک اطلاعاتی اکسس بخاطر اینکه کسی ندونه بانکم کدونه نام فایل رو از DB.mdb به DB.dll تغییر میدادم و فایل شکل dll به خوش میگرفت و برنامه هم بدون هیچ مشکلی کار میکرد shalineh27-09-2009, 12:54 PMسلام. فایل udl برای همین کار هست که گرفتن اطلاعات سرور و دیتابیس رو کپسوله کرده. اما مشکل من عدم امنیت این فایل هست. به راحتی قابل ویرایش هست و در صورت تغییر محتوای فایل ارتباط با سرور قطع میشه. فکر نکنم راهی داشته باشد. چون ویرایش کردن یک فایل کار چندان مشکلی نخواهد بود. حتی اگر یک فایل در تمام مدت روشن بودن سیستم ، در حال استفاده توسط برنامه یا سیستم باشد. من دقیقا متوجه نشدم. آیا منبع دیتای شما ثابت است؟ ( Path ) یا متغیر است؟ برنامه شما تک کاربره است یا مولتی یوزر؟ اگر اطلاعات دیتا و سرور توسط کاربر تغییر کنه چه اتفاقی برای برنامه یا هدف شما می افته؟ اینها سوالاتی است که باید پاسخ داده شود. اونوقت بهتر میشه هدف شما را ارزیابی کرد وراهنمایی کرد . در ضمن یک فایل کد شده رو کاربر چگونه میخواهد بصورت صحیح دستکاری کند در حالیکه چیزی از محتویات فایل سر در نمی آورد؟!!! مگر اینکه عملیات خرابکارانه داشته باشد. که این هم در برنامه های سینگل یوزر معنا ندارد. به هر حال بهتر است کمی موضوع رو بازتر کنید. shalineh27-09-2009, 01:03 PMیه چیزه دیگه: کالا در هر برنامه ای ، حتما قبل از استفاده از یک فایل خارجی ، باید محتویات اون بررسی بشه و ببینیم که آیا فرمت آن و همچنین مقادیر و پارامترهای آن با قوانین برنامه ما و نوع متغیرهای ما سازگاری دارد یا نه؟ اگر نه که ، باید پیام مناسبی به کاربر داده شود. Payman_6227-09-2009, 04:26 PMسلام. موقع ورود به نرم افزار فرم LogIn میاد و اونجا اطلاعات مورد نیاز توش هست http://www.mihanupload.com/images/co31eo1kbcxmuirc8vq.jpg اطلاعات log in رو هم تو یه فایل ذخیره میکنیم اگر می خواید کسی متوجه اون فایل نشه پسوند اونو عوض کنید مثلا Info.dll برنامه هیچ مشکلی با خوندن یا نوشتن توش نداره و کاربر متوجه نمیشه که این فایل یک dll نیست مثلا من قبلا برای برنامه های بانک اطلاعاتی اکسس بخاطر اینکه کسی ندونه بانکم کدونه نام فایل رو از DB.mdb به DB.dll تغییر میدادم و فایل شکل dll به خوش میگرفت و برنامه هم بدون هیچ مشکلی کار میکرد مشکل من اینه که کاربر اصلا با برنامه ارتباط نداره. برنامه به صورت سرویس ران میشه و پشت پرده کاراش رو میکنه و تا میتونه باید کارش رو مخفیانه انجام بده. فرم یوزر و پس برای کاربر ظاهر نمیشه. البته میشه مثلا هنگام نصب آدرس سرور رو بگیره. ولی میخوام ببینم روش مناسب تری کسی بلده؟ امنیت برنامه هم باید خیلی بالا باشه. طوری که حتی کاربر نتونه برنامه رو ببنده. اینه که باید رو ارتباط با سرور هم دقت زیادی کنم. فکر نکنم راهی داشته باشد. چون ویرایش کردن یک فایل کار چندان مشکلی نخواهد بود. حتی اگر یک فایل در تمام مدت روشن بودن سیستم ، در حال استفاده توسط برنامه یا سیستم باشد. من دقیقا متوجه نشدم. آیا منبع دیتای شما ثابت است؟ ( Path ) یا متغیر است؟ برنامه شما تک کاربره است یا مولتی یوزر؟ اگر اطلاعات دیتا و سرور توسط کاربر تغییر کنه چه اتفاقی برای برنامه یا هدف شما می افته؟ اینها سوالاتی است که باید پاسخ داده شود. اونوقت بهتر میشه هدف شما را ارزیابی کرد وراهنمایی کرد . در ضمن یک فایل کد شده رو کاربر چگونه میخواهد بصورت صحیح دستکاری کند در حالیکه چیزی از محتویات فایل سر در نمی آورد؟!!! مگر اینکه عملیات خرابکارانه داشته باشد. که این هم در برنامه های سینگل یوزر معنا ندارد. به هر حال بهتر است کمی موضوع رو بازتر کنید. فکر نمیکنم این جزییات مهم باشه. برنامه به صورت کلاینت سروری هست که نسخه سرور رو سرور و کلاینت هم روی کلاینت ها نصب میشه. من میخوام از دست کاری تو کارکرد برنامه توسط کاربران جلوگیری کنم. مثلا محتویات udl رو ادیت نکنن و برنامه ارتباطش با سرور قطع بشه. CHAPTER27-09-2009, 06:34 PMالبته در حضور دوستان جسارت نباشه خوب چرا می خواهید کانکشن رو در یک فایل ذخیره کنید خوب می تونید در هر بار اجرای برنامه به صورت خودکار نام سرور و نام دیتابیس رو پیدا کنید و کانکشن رو ست کنید.برای پیدا کردن نام دیتابیس هم از sp_helpdb استفاده کنید. _H2_27-09-2009, 07:11 PMسلام من یک نمونه کد دارم که شاید کمک کند ... در این کد بسیار بسیار ساده برای ذخیره از Settings های خود پروژه استفاده شده ولی قبل از ذخیره سازی و بعد از خواندن فقط به صورت نمادین اطلاعات با Base64 مثلاً رمزنگاری شده. اگر از کدی شبیه همین و با کلاسهای اصلی دات نت برای رمزنگاری در فضای System.Security.Cryptography استفاده کرد، گمانم خوب باشد. بحرحال رمزنگاری را میخواهد چون اطلاعات ConnectionString حاوی user و Pass است که مواردی امنیتی است ولی اگر Settings را هم نخواهید میتوانید در قالب یک فایل با هر پسوندی در کنار برنامه هم ذخیره کنید (bin.* یا dat.* و...) نمونه کد: support.h02.ir/fwlink/?LinkId=1001372507 تاپیک مرتبط: 244429&page=3 MTPROG28-09-2009, 08:52 AMمشکل من اینه که کاربر اصلا با برنامه ارتباط نداره. برنامه به صورت سرویس ران میشه و پشت پرده کاراش رو میکنه و تا میتونه باید کارش رو مخفیانه انجام بده. فرم یوزر و پس برای کاربر ظاهر نمیشه. البته میشه مثلا هنگام نصب آدرس سرور رو بگیره. ولی میخوام ببینم روش مناسب تری کسی بلده؟ خود سرویسها هم میتونن اطلاعات ورودی بگیرند شما میتونید همون اطلاعات log in رو تو properties همون سرویس قرار بدید اگه به تصویر زیر دقت کنید سرویسها توانایی لازم رو دارن http://www.mihanupload.com/images/ajzg1u5tc0ld 6p578bj.jpg _H2_28-09-2009, 09:54 AMسلام میبخشید، من کل تاپیک را مطالعه نکرده بودم و حالا که کاربر MTPROG پست قبلی را دادند متوجه این شدم ... مشکل من اینه که کاربر اصلا با برنامه ارتباط نداره. برنامه به صورت سرویس ران میشه و پشت پرده کاراش رو میکنه و تا میتونه باید کارش رو مخفیانه انجام بده. فرم یوزر و پس برای کاربر ظاهر نمیشه. البته میشه مثلا هنگام نصب آدرس سرور رو بگیره. ولی میخوام ببینم روش مناسب تری کسی بلده؟ اگر اینطور است شاید بد نباشد برنامه و سرویس شما مقدار ConnectionString رمزنگاری شده را از محل مشخص و خواصی بخواند (مثل یک مقدار در رجیستری) سپس یک برنامه کمک فرمدار و با UI هم برای پیکر بندی برنامه در کنار این ویندوز سرویس وجود داشته باشد. بالاخره شما اغلب برنامه های خدماتی کلی را که میبینید ویندوز سرویس دارند یک برنامه UI دار برای تنظیمات هم دارند، چه ضد ویروسها و چه خود SQLServer و... (خود SQLServer ابزار نمایشی و مرتبط با کاربری مثل SQL Server Configuration Manager و SQL Server Surface Area Configuration را دارد. که در واقع ساپورت تنظیمی سرویسهایش را انجام میدهند و حتی برخی تغییرات تنظیمی با Restart سرویس یا Start بعدی آن اعمال میشود و همان لحظه اثر نمیکند. نتیجتاً پیشنهاد من قرار دادن امکان edit و تغییر ان محل مشخص ConnectionString درون یک برنامه خدماتی فرمدار مرتبط با سرویستان است. این برنامه لزوماً نیاز نیست همیشه در RAM و در حال اجرا باشد و همیشه هم جلوی چشم باشد. ( برخی از ابزار خدماتی SQLServer اصلاً Shortcut اش هم در منوی Start وجود ندارد و باید دستی به پوشه مورد نظر بروید و اجرایشان کنید که دیگر اجرا بودن در RAM و وجود Shortcut در منوی Start و... به صلاح دید برنامه نویس و شرایط اجرای آن بستگی دارد. ) Payman_6230-09-2009, 10:20 PMسلام. تشکر از نظرات مفیدتون. جناب MTPROG عکسی که شما گذاشتی مربوط به ران شدن سرویس به صورت عادی یا از طریق یه یوزر خاص هست. اما اگه منظورتون اینترکتیو بودنش هست بله برنامه بنده به صورت اینترکتیو هست. اما این که بخوام از کاربر کانکشن استرینگ رو بگیرم روش مناسبی نیست. پایین توضیح میدم. جناب h2 تو فکر یه همچین روشی بودم که اطلاعات دفعه اول ران شدن از ادمین گرفته بشه و جایی ذخیره بشه. احتیاجی هم به برنامه کمکی نداره. چون نیازی نیست اطلاعات ادیت بشه. به 2 دلیل. اول این که آدرس سرور ثابته و نیازی به ادیت نداره. دوم این که ممکنه کاربران عادی از امکان ادیت کانکشن استرینگ سو استفاده کنند ( حتی اگه پسورد و ... هم در نظر گرفته بشه ) و برنامه به مشکل بر بخوره. سالی 1 بار هم نیاز به ادیت کانکشن استرینگ نیست. اگر بود برنامه پاک و دوباره نصب میشه تا مطمن باشم 100% توسط مسوول پشتیبانی انجام میشه نه خود کاربر. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 2574]