PDA

View Full Version : حرفه ای: بررسی و ایجاد روشی جدید برای محافظت برنامه تحت اکسس



AbbasSediqi
دوشنبه 02 بهمن 1396, 23:12 عصر
با سلام خدمت تمامی دوستان و اساتید گروه اکسس

فکر کنم یکی از بزرگترین مشکلات برنامه نویسی اکسس بحث امنیته

خوب تا به الان روش های زیادی برای این منظور ارائه شده که البته همه دارای نواقصی هستند.

هدف این تاپیک اینه که تجربه ها رو جمع کنیم شاید چیزی از آب دربیاد

البته پیشنهاد میکنم که خارج از باکس فکر کنیم

امیدوارم دوستان و اساتید هم یاری کنند

AbbasSediqi
دوشنبه 02 بهمن 1396, 23:23 عصر
خوب خود بنده برای شروع به فکر روش خاصی هستم

فعلا در مرحله تئوریه

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

روش:

به طور کلی اگر دیتابیس از فرم ها و کوئری ها جدابشه امنیت تا حدودی بهتر میشه

خوب در این صورت باید فایل دیتابیس رو پسورد گذاری کنیم و در فایل فرم ها پسورد رو قرار بدیم تا بتونیم جدول ها رو فراخوانی کنیم

مشکل این روش اینه که امکان دسترسی به فایل دیتابیس بعد از فراخوانی وجود داره(توضیح نمیدم چه طوری)

و در بعضی موارد هم پسورد در فایل فرم ها رو میشه بدست آورد

و اما روشی که بنده دارم روش فکر میکنم اینه که:

اگر فراخوانی فایل دیتابیس رو با استفاده از service انجام بدیم چی؟

پسورد در سرویس باشه و از طریق اون دیتا رو فرستاده و یا بگیریم

خوب این کار رو در vba میشه با استفاده از ntservice انجام داد

به نظر دوستان و اساتید ارزش وقت گذاری داره؟

AbbasSediqi
دوشنبه 02 بهمن 1396, 23:26 عصر
برای اینکه نشه از سرویس همینطوری دیتا گرفت و یا فرستاد با استفاده از توکن token (که با استفاده از username و password ایجاد میشه) هر بار ، برای هر دستور لوگین کنیم

AbbasSediqi
دوشنبه 02 بهمن 1396, 23:37 عصر
فایل ضمیمه نمونه ای از ایجاد سرویس با استفاده از vb6


برای اجرا باید فایل SvSampleControl.exe رو run as administrator کنید و بعد سرویس رو install کنید و سرویس SampleVB6Service ایجاد میشه


لطفا نظر و راهنمایی فراموش نشه


ممنون

mazoolagh
پنج شنبه 05 بهمن 1396, 08:46 صبح
به طور کلی اگر دیتابیس از فرم ها و کوئری ها جدابشه امنیت تا حدودی بهتر میشه
جدا کردن دیتا بعنوان backend و برنامه (فرم و گزارش و ماجول و ...) بعنوان frontend کاریست که حتما باید انجام بشه.
صرفنظر از بحث امنیت، داستان پشتیبانی و نگهداری و آپگرید رو هم تا حد زیادی آسونتر میکنه بخصوص اگر در شبکه قرار هست استفاده بشه که دیگه الزامیست.
البته همین امنیت هم دو جنبه داره:
یکی اینکه دسترسی مستقیم کاربرها رو به دیتا ببیندیم تا نتونن دیتا کنترل نشده ثبت کنن؛ از روی عمد یا به اشتباه داده ها رو دستکاری و تخریب کنین و ...
یک روی دیگه هم امنیت کد هست که اون هم یک بخشش همین امنیت دیتاست و بخش دیگه اش حفظ منافع برنامه نویس
البته فکر کنم اینجا شما روی امنیت دیتا تاکید دارین اگر درست فهمیده باشم


خوب در این صورت باید فایل دیتابیس رو پسورد گذاری کنیم و در فایل فرم ها پسورد رو قرار بدیم تا بتونیم جدول ها رو فراخوانی کنیم
قطعا backend باید رمزگذاری بشه - البته در mdb بیهوده است اینکار ولی برای accdb بغیر از Brute-force راه دیگه ای برای پیدا کردن رمز نیست که اون هم برای رمزهای خیلی ساده و ضعیف تازه به احتمال کم هست.


مشکل این روش اینه که امکان دسترسی به فایل دیتابیس بعد از فراخوانی وجود داره(توضیح نمیدم چه طوری)
و در بعضی موارد هم پسورد در فایل فرم ها رو میشه بدست آورد
مشخص نکردین این ریسک در چه حالتی هست؟ جداول به صورت دائمی لینک شده باشن یا در زمان اجرا بصورت دینامیک attach و در پایان برنامه detach بشن
و یا اینکه با کانکشن به backend وصل شده باشیم
همین جور مشخص نفرمودین که این ریسک فقط برای فایلهای mdb است یا شامل فایلهای accdb هم میشه
بعنوان مثال:
اگر backend با فرمت accdb و با پسورد قوی رمزگذاری شده باشه و frontend هم با فرمت accde باشه و جداول هم linked table باشن باز هم ریسک داریم یا نه؟
و اگر پاسخ مثبت هست چه میزان؟


اگر فراخوانی فایل دیتابیس رو با استفاده از service انجام بدیم چی؟
پسورد در سرویس باشه و از طریق اون دیتا رو فرستاده و یا بگیریم
خوب این کار رو در vba میشه با استفاده از ntservice انجام داد
به نظر دوستان و اساتید ارزش وقت گذاری داره؟
من البته نظر شخصی خودم رو با اجازه تون مطرح میکنم و این ممکنه واقعا درست نباشه از نظر فنی،
بطور کلی اکسس رو بخاطر سادگی و سریع به جواب رسیدن دوست دارم. یکجورایی پیچیده کردن کار با اون رو نمیپسندم - عرض کردم نظر شخصی هست این.
شخصا ترجیح میدم بجای استفاده از windows service از sql server برای backend استفاده کنم.

mazoolagh
پنج شنبه 05 بهمن 1396, 08:53 صبح
برای اینکه نشه از سرویس همینطوری دیتا گرفت و یا فرستاد با استفاده از توکن token (که با استفاده از username و password ایجاد میشه) هر بار ، برای هر دستور لوگین کنیم
استفاده از token در سرویس (اعم از سرویس وب یا ویندوز) وقتی که پای امنیت در میون هست که صددرصد الزامیست.
جدای نظر شخصی که پست قبلی نوشتم، دو مورد برای من جای پرسش هست:
1- چرا vb6 که یک تکنولوژی مرده است به جای دات نت؟ البته شاید فقط در این مثال پیوست که گذاشتین از vb6 استفاده کردین.
2- بنظر میاد مشکل پرفورمنس هم داشته باشیم به دلیل اینکه برای هر درخواست باید authentication انجام بدیم.

CyborgHawk
پنج شنبه 05 بهمن 1396, 23:19 عصر
.................................................. ......

AbbasSediqi
پنج شنبه 05 بهمن 1396, 23:21 عصر
با سلام خدمت دوست و استاد گرامی Mazoolagh

در خصوص




مشکل این روش اینه که امکان دسترسی به فایل دیتابیس بعد از فراخوانی وجود داره(توضیح نمیدم چه طوری)




مشخص نکردین این ریسک در چه حالتی هست؟ جداول به صورت دائمی لینک شده باشن یا در زمان اجرا بصورت دینامیک attach و در پایان برنامه detach بشن
و یا اینکه با کانکشن به backend وصل شده باشیم
همین جور مشخص نفرمودین که این ریسک فقط برای فایلهای mdb است یا شامل فایلهای accdb هم میشه
بعنوان مثال:
اگر backend با فرمت accdb و با پسورد قوی رمزگذاری شده باشه و frontend هم با فرمت accde باشه و جداول هم linked table باشن باز هم ریسک داریم یا نه؟
و اگر پاسخ مثبت هست چه میزان؟


باید خدمت شما عرض کنم اگر به صورت عادی ( منظورم استفاده از ado نیست ) بعلت باز شدن یک پروسس جدید توسط اکسس میشه از طریق processor بهش دسترسی پیدا کرد



در خصوص این مطلب هم




من البته نظر شخصی خودم رو با اجازه تون مطرح میکنم و این ممکنه واقعا درست نباشه از نظر فنی،
بطور کلی اکسس رو بخاطر سادگی و سریع به جواب رسیدن دوست دارم. یکجورایی پیچیده کردن کار با اون رو نمیپسندم - عرض کردم نظر شخصی هست این.
شخصا ترجیح میدم بجای استفاده از windows service از sql server برای backend استفاده کنم.


بنده این روش رو بر این منظور پیشنهاد کردم که

1) اکثر دوستان از sqlserver به عنوان backend استفاده نمیکنند

2) در صورت لوکال بودن برنامه استفاده از sqlserver با حجم ram , Cpu که استفاده میکنه بسته به نوع برنامه ممکنه منطقی نباشه

3) در صورت استفاده از این روش حتی اگر فایل فرم ها رو به صورت باز و بدون هیچ امنیتی قرار بدیم ، برنامه امنیتش حفظ میشه( نظر بنده است )




فرض رو بر این بگیریم که برنامه نوشته شد با این روش و در اون هیچ table و یا link table قرار داده نشده و تنها فرم login اقدام به token کردن میکنه

و این رو برای هر درخواست به سرویس اعلام میکنه و سرویس در صورت تشخیص صحیح بودن username و Password به درخواست جواب بده و

چهار عمل اصلی یعنی (add,edit,delete,select) رو به صورت فانکشنی در سرویس تعریف کنید ( یک بار برای همه برنامه)



آیا امنیت ارتقا پیدا نمیکنه؟

خوب در این صورت در برنامه نویسی راحتی به دنبال نداره؟

امکان تغییر برنامه چه کوچ کردن برنامه به طور کل از access به زبان برنامه نویسی دات نت و یا چه گوچ از دیتابیس access به sql به راحتی انجام نمیشه؟

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

چک کردن اتصال به عنوان نمونه به صورت مجزا؟

در صورت استفاده از sqlserver چی ایا باز همون چهار عمل اصلی رو با حفظ امنیت بهتر و کارا تر انجام نمیده؟

آیا نمیشه سوریس رو به عنوان پلی مجزا برای ارتباط با دیتابیس ( هر نوعی ، access ،sqlserver ، mysql و ...) در نظر گرفت ؟

درصورت قرار دادن دستورات sql برای چهار عمل اصلی در سرویس امکان پیدا کردن نام دیتابیس ها هم بسیارکم میشه این طور نیست؟


و اما درخصوص




1- چرا vb6 که یک تکنولوژی مرده است به جای دات نت؟ البته شاید فقط در این مثال پیوست که گذاشتین از vb6 استفاده کردین.
2- بنظر میاد مشکل پرفورمنس هم داشته باشیم به دلیل اینکه برای هر درخواست باید authentication انجام بدیم.


بله با زبان های دیگه هم میشه این کار رو انجام داد این نمونه صرفا به این جهت ارائه شد چون دوستانی که با اکسس کار میکنن به vb6 و یا vba آشنا ترن تا vb.net , C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎ ,C++‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎ ,c


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


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


این تاپیک صرفا جهت ارائه روش و بررسی کارایی و یا عدم کارایی روش پیشنهادی رو داره

بحث و گفتگو و پرسیدن سوال و جواب گرفتن و حصول نتیجه ای منطقی هدف این تاپیکه


باز هم تشکر میکنم از جناب mazoolagh که نظرشون رو گفتن وکمک کردن











و اما سوال آخر:
جناب mazoolagh شما روش دیگری رو دارید؟


آیا امکان به اشتراک گذاشتن روش برای شا مقدوره؟

Mehr@ban
جمعه 06 بهمن 1396, 14:56 عصر
سلام بر دو استاد عزیز و گرامی که در اکثر موارد در کنار بنده و دیگر رفقای آماتور تالار بودن و راهنمایی های لازم رو داشتن.

الغرض از ارسال این پست در این تاپیک این بود که به دلیل تخصصی بودن موضوع مورد بحث از اظهار نظر کردن عاجزم، ولیکن مشتاقانه پیگیر این مبحث هستم.
امیدوارم تا این تاپیک هم مثل باقی تاپیکهای تخصصی به سرانجام برسه.

mazoolagh
یک شنبه 08 بهمن 1396, 12:13 عصر
جناب mazoolagh شما روش دیگری رو دارید؟
آیا امکان به اشتراک گذاشتن روش برای شا مقدوره؟

روش متعارف من همین بود که عرض کردم:
فایل backend با پسورد قوی بصورت linked table و فرمت accdb
فایل frontend به فرمت accde و بستن shift
اتفاقا برای همین هم بود که میخواستم نظر شما رو در این مورد بدونم - چون تا بحال مشکلی در رابطه با شکسته شدن پسورد backend یا لو رفتن کد و طراحی نداشتم.
البته ممکنه از خوش شانسی من و کارفرماها باشه که هکری سراغ ما نیومده؛ حالا یا دیتا بی ارزش بوده یا کد یا هردو یا واقعا همینقدر محکم کاری کفایت میکنه ؛ نمیدونم.


روش پیشنهادی شما قطعا ارزش کار و بررسی رو داره (نه فقط بخاطر امنیت، میتونه مزایای دیگه ای هم داشته باشه) - به همین خاطر پیشنهاد میکنم نمونه کاربردی تری از ویندوز سرویس (بجای نمونه فعلی) بگذارین که همین عملیات چهارگانه رو پوشش بده.

من البته در مبحث امنیت دانشی ندارم و این رو بعهده دیگران میگذارم ولی مشتاقانه منتظر نمونه میمونم (هم برای یادگیری و هم احتمالا گذاشتن اون در بوته آزمایش های سخت)

mazoolagh
یک شنبه 20 اسفند 1396, 08:52 صبح
جهت یادآوری

eb_1345
یک شنبه 29 دی 1398, 16:21 عصر
...............................

eb_1345
سه شنبه 01 بهمن 1398, 02:04 صبح
.....................



(https://barnamenevis.org/showthread.php?559541-%D9%86%D9%85%D8%A7%DB%8C%D8%B4%DB%8C-%D8%A7%D8%B2-%D9%85%D8%AD%DB%8C%D8%B7-%DB%8C%DA%A9-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%AD%D8%B3%D8%A7%D8%A8%D8%AF%D8%A7%D8%B1%DB%8C&p=2427312#post2427312)