connectionStrings
حفاظت از اطلاعات یکی از ارکان مهم هر برنامه ای است که با اطلاعات حساس سروکار دارد. از آنجایی که استفاده از سیستم های مدیریت داده ها (DBMS) برای ذخیره و بازیابی اطلاعات بسیار رایج شده است، لازم است نکاتی را در مورد یکی از پرکاربردترین سیستم های مدیریت داده ها به نام Microsoft SQL Server و روش های امن ارتباط با آن ذکر نماییم.
معمولاً حساس ترین بخش امنیتی سیستمهای مدیریت داده ها، بخش ارتباطی آنها با خارج میباشد که متاسفانه زیاد جدی گرفته نمی شود و تقریباً در تمامی برنامه ها (مخصوصاً برنامه های حسابداری رایج که اطلاعات بسیار مهم و حساسی را در خود نگهداری می نمایند) اشکالات امنیتی وجود دارد.
در این بخش به طور خاص امنیت Connection strings در ارتباط با Microsoft SQL و از طریق C# .net را مورد بررسی قرار میدهیم:
تعریف Connection string:
رشته ای است که حاوی اطلاعاتی راجع به مرکز نگهداری داده و نحوه ارتباط با آن می باشد.
اجتناب از به کار بردن اطلاعات ارتباطی به صورت متنی
استفاده از نام کاربری و کلمه عبور به صورت متنی تهدید بزرگی برای برنامه شما به حساب می رود. حتی اگر این متنها را در داخل برنامه گنجانده باشید، به سادگی و با disassemble کردن کد شما، تمامی اطلاعات متنی در دسترس خواهند بود. بنابراین پیشنهاد می شود حتی در متن برنامه هم استفاده از اطلاعات حساس به صورت متنی محدود شود. در مورد connection string همانگونه که می دانید یک property به نام Integrated Security یا همان Trusted_Connection دارد که منظور از آن استفاده از مشخصات کاربر کنونی ویندوز می باشد. اگر در conncetion string این property به این صورت استفاده شده باشد:
Integrated Security = SSPI و یا Trusted_Connection = True
یعنی برنامه شما برای ارتباط با بانک اطلاعات به جای اینکه از نام کاربری و کلمه عبور درج شده در سیستم مدیریت اطلاعات استفاده نماید، از اطلاعات ورود کاربر جاری ویندوز استفاده می نماید.
این کار امنیت برنامه شما را تا حدود خوبی بالا می برد، زیرا در واقع شما امنیت را به ویندوز سپرده اید!
Persist Security Info=False!!
بخش دیگری که در connection string مورد بررسی قرار می دهیم، Persist Security Info است. این بخش همانطور که از نامش پیداست باعث باقی ماندن اطلاعات شما در ارتباط می شود. یعنی اگر شما conncetion خود را open نمایید و این property را برابر True و یا Yes قرار دهید، به راحتی می توان اطلاعات شما را از آن به دست آورد. (در واقع ویندوز هم در این حالت نام کاربری شما را به خاطر می سپارد!)
از این رو به شدت توصیه می شود که این بخش نیز به صورت زیر باشد:
Persist Security Info = False
البته به صورت پیش فرض این مقدار برابر False است، اما همیشه در موارد امنتی بهتر است از ریسک کردن خودداری شود. این property مخصوصاً در مواردی که شما conncetion را در حالت باز و به یک سرور غیر مطمئن برقرار می نمایید بسیار کاربرد دارد و اکیداً توصیه می شود که از آن به صورت ذکر شده استفاده نمایید.
نکته آخر این است که چگونه از خود conncetion string حفاظت نماییم؟ در برنامههای ویندوزی connection string اگر در settings برنامه تعریف شده باشد، به صورت یک فایل متنی ساده در کنار فایل اجرایی قرار خواهد داشت. بنابراین باید برای رفع این معضل و ایمن سازی آن کاری کرد. برای مطالعه ایمن سازی connection strings به این بخش مراجعه نمایید.
منابع:
http://msdn.microsoft.com/en-us/library/89211k9b%28vs.71%29.aspx
http://en.wikipedia.org/wiki/Connection_string