اهمیت امنیت وب سرویس
سلام
دوستان یه برنامه وب سرویس دارم که اطلاعات از طریق volley میگیرم
در قسمت دیگه ای از برنامه امکان ارسال متن و تصویر برای کاربر وجود داره که در دیتابیس جداگانه ذخیره میشه
طبق تحقیقی که کردم عملا امکان مخفی کردن url ای که به api وصل میشه وجود نداره
زیاد با php اشنا نیستم و فقط تونستم به دیتابیس وصل بشم و اطلاعات بگیرم و همچنین در api دیگه بتونم اپلود کنم
برنامه خبری هست و برای یک شهر می باشد اطلاعات هم اخبار و مطالب عمومی شهر هستند که از سایت های مختلف جمع شده اند
پس کسی به اونا نیازی نداره چون حتی منبع اونا هم داخل برنامه ذکر میشه
الان سوالم اینه برای امنیت این ارتباطات باید چیکار کرد ؟
و اینکه اگه الان به همین شکل برنامه منتشر بشه و مثلا شما لینک api داشته باشید غیر اینکه بتونید اطلاعات بگیرید دیگه چه خطری من و نرم افزارمو تهدید میکنه ؟
ممنون میشم این موضوع شفاف توضیح بدید
سلام دوست عزیز
یکی از کارهایی که باید انجام بدین ، مواظب باشین باگ Sql injection نداشته باشین ، از طریق این باگ میشه اطلاعاتی که توی جدول های دیتابیستون ذخیره شده رو بیرون کشید
دومین مورد پیشنهاد می کنم از ssl استفاده کنین تا دیتایی که بین کلاینت و سرور رد و بدل میشه قابل شنود نباشه
و اینکه در جاهایی که نیاز هست سعی کنین از توکن استفاده کنین تا کسی خارج از نرم افزار شما ، نتونه به اون api درخواست بفرسته ، مثلا فرض کنید یکی از متدهاتون کار insert یک مقداری رو در دیتابیس انجام میده ، حالا اگه url اون متد رو بدونم میتونم خارج از نرم افزار با یک حلقه while بی نهایت ، مقدار زیادی داده insert کنم.
یه سری کارهای دیگه هم هست که میشه انجام داد اما همین موارد هم تاحد زیادی کارتون رو راه میندازه
شما نیازی به امنیت اطلاعاتتون ندارید ، پس نیازی به دیکد کردن اونها روی دیتابیس نیست ، کل منابع و دیتابیستون هم لو بره اهمیتی ایجاد نمیکنه ! تنها مسائلی ایی که نیاز دارید این هست که از https استفاده که حداقل کمکی کرده باشه که اسنیف نشید ، اسنیف شدن باعث میشه URL شما همراه با پارامترهای ارسالی لو بره ، که هرکسی به راحتی میتونه با سرور شما و API ایی که دارید ارتباط برقرار کنه ، مثلا با یه حلقه FOR میشه خیلی راحتر چندهزار دیتا با دیتابیستون اضافه کرد و این براتون دردسرساز میشه ، و اینکه برای رکوئست هایی که به سمت سرور میزنید ، یک کلید قرار بدید که فقط شما بتونید با سرور ارتباط داشته باشید ، برای ساخت کلید یکی از راه های موثر استفاده از AES هست ولی در ساده ترین حالت شما میتونید یک جیسون آبجکت داشته باشید که شامل دو کلید هست یک کلید که نشون میده شما چه دیتایی رو میخاید و کلید دوم که یک راندوم هش هست ، حالا این جیسون رو به base64 تبدیل کنید در تمامی رکوئیست های ارسالی از این مورد استفاده کنید اگر آموزش های استاد رو دیده باشید جای مناسب برای استفاده از این کلید در پارامتر action هست
دقت کنید base64 به راحتی قابل خوندن هست و اصلا به امنیت کمک نمیکنه ، ولی در صورتی که قبلا تجربه ایی در استفاده از AES نداشتید برای درک موضوع بهتون کمک میکنه و اینکه خیلی ساده هم هست پیشنهاد میکنم کل مقدار base64 شده رو تقسیم به دو قسمت کنید و سروته به سرور بفرستید !
نمونه جیسون
{"action":"get_news","random_hash":"87564534154"}
نمونه کد PHP
if(action==get_news){}
نمونه encode شده جیسون به base64 که سمت php باید decode بشه
eyJhY3Rpb24iOiJnZXRfbmV3cyIsInJhbmRvbV9oYXNoIjoiODc1NjQ1MzQxNTQifQ==
لینک های مفید :
https://www.base64encode.org/
https://stackoverflow.com/questions/7360403/base-64-encode-and-decode-example-code
https://stackoverflow.com/questions/1374753/passing-base64-encoded-strings-in-url
https://stackoverflow.com/questions/18842075/decode-base64-string-php
خیلی ممنون از توضیحاتتون ولی من چون اولین کارم در مورد وب سرویس هست یکم گیج شدم !
من اطلاعاتی که دارم مهم نیستند چیزی که متوجه شدم فقط باید جلو اینو بگیرم که تا حد امکان کسی نتونه غیر از داخل برنامه ، برای api درخواست بفرسته .
یه api جهت ارسال مطلب همراه با تصویر دارم که داخل دیتابیس خودش ذخیره میکنه ،
چندتا api برای دریافت از چند بخش دیگه دارم که از دیتابیس های خودشون خبر ، مطلب و ... برای کاربر نشون میده .
الان برای اینکه یه کلید یا پسورد همراه با درخواست برای api بفرستم از چه راهی باید استفاده کرد ؟
و یه چیزی که برام مبهم شده ، ما اگه همون کلید مستقیم ارسال کنیم خب کسی که بتونه url بخونه کلید ارسالی هم می خونه دیگه !
اگه کلید رمزگذاری شده باشه ، داخل api باید به شکل قبلی برگرده و با یه چیزی مقایسه بشه ؟ یعنی مقدار کلید داخل api هم هست ؟
اگه میشه در این مورد راهنمایی کنید یا لینک یه اموزش پروژه محور معرفی کنید که متوجه بشم / با تشکر
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .