الرجاء احتاج اجابة من خبير Ionic لتطبيقات الهواتف الذكية

اريد برمجة تطبيق للاندرويد وال ios لموقعي الالكتروني لكن قبل ان ابدا في برمجة ال Api الذي سيتعامل مع التطبيق لدي سؤال لطالما كان يحيرني، كيف سوف اسمح للتطبيق ان يتعامل مع السيرفر كيف اعطي تصريحات ان يقوم في عملية رفع صور وكيف سيتخاطب التطبيق مع السيرفر، اعي ان يمكن عمل Api لكن كيف اسمح لتطبيقي للوصول للسيرفر وكيف امنع باقي التطبيقات من الوصول في حال حاول احدهم العبث، سوف تقول لي ضح كود في داخل التطبيق حتى تتأكد مع من يتخاطب السيرفر، لكن نفس الحالة سوف يقوم الهكر بفك مرفات التطبيق واخراج الكود منه، ما هي الطريقة حتا ادع سيرفري يسمح فقط لتطبيقي في الوصول للبيانات ؟

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

mr_student أضف ردا

إن كنت ستسخدم ionic فأنت أمام خيارات لا حصر لها بالنسبة للتعامل مع السيرفر

  • أولاً عليك أن تقوم بـ cors setup بين تطبيقك و الـ API

هنا أخبر الـ API أنّ عليها القبول بكافة الـ requests القادمة من الـ client الموجود على البورت 4200 في حالتك سيختلف الأمر بحسب أين ستضع تطبيقك و يمكنك أيضاً السماح لـ CORS من أي مصدر (هذا سيسمح لأيّ كلاينت في العالم إرسال طلبات لتطبيقك)

الكود في الصورة هو لـ aspnetcore 2.1 ليس بالضرورة أن يكون ذاته بالنسبة للـ API الذي ستستعملها لكن الفكرة ستظل نفسها.

  • السيناريو الآخر بالنسبة للسيرفر أن تقوم بـ HMAC و هي تقنية تجعل التعامل بين السيرفر و الكلاينت مبني على api key معين، كيفية إنشاء هذه الـ middlewares تعتمد بشكل كبير على اللغة و إطار العمل في السيرفر أيضاً.

  • ثانياً عليك استخدام شيء مثل RXjs (مع angular http client module) أو fetch أو axios، في حالة ionic

شكرأً لك على تعاونك معي, سوف احاول دراسة الطريقة التي قدمتها واخبرك بالنتائج :)

mr_student أضف ردا

بالنسبة لتطبيق موبايل فأنت في الغالب لست مضطراً لعمل hosting لـ client لذلك انصحك بالطريقة الثانية أكثر، و هي إنشاء api key و وضع هذا المفتاح في الـ header لكل طلب يرسله الكلاينت إلى الـ API.

;({"const headers = new HttpHeaders({"api-key":"api_key_value

;({ this.http.post(endpointURL ,payload, {headers:headers

و في الباك إند ستشترط الـ middleware أن يكون كل طلب يحمل في الـ header هذا المفتاح بالقيمة الصحيحة.

اقتراحتك كلها لاتنفع في حال تحليل بسيط للتطبيق و استخراج البورت و المفاتيح المستعملة... الخ

لماذا لا تنفع؟ api keys تعمل بها تقريباً كلّ الـ API الموجودة على االانترنت.

اضن يجب ان تربط تطبيقك مع firebase كوسيط ومن خلالها تصل الى سيرفر. سمعت هذه طريقة في دورة حسين ربيعي لل firebase

حبيبي لايمكن ان تمنع تطبيق اخر من ان يتصل مع سرفرك و يحاكي تطبيقك الاصلي

يجب عل مستخدم النهائي ان يسجل دخوله قبل ان يحصل عل اي بيانات، لاادري ما الصعب هنا

Emad_Alhamou أضف ردا

نعم بعد عملية التسجيل كيف اضمن ان لايقوم الهكر بنفس العملية على تطبيقاته من خلا تسجيل دخول على سيرفري وارسال مجموعة صور على سيرفري دون علم مني ويقوم في حشو السيرفر بالصور المكررة من خلال عملية لوب على السيرفر , كيف اضمن ان الركوست يأتي من التطبيق نفسه لا من الهكر localhost ؟

ربمت علي ان اقوم بالتحقق من اخر عملية رفع وهكذا اضمن متى ارسل اخر ملف واضع هنا المعايير المطلوبة الخاصة بي !

ملاحظة نسيت ذكرها, الموقع مبني بال Node js + MongoDB + express

mr_student أضف ردا

و بما أنّك تستخدم NodeJS فالـ middleware ستكون من الشكل

فقط عندم يتحقق الشرط ستمرر هذه الدالة الـ request للميدل وير التي تليها عن طريق استدعاء next و إن لم يتحقق فلن تمرر الـ request و يمكن أن تُعيد bad request إلى الكلاينت صاحب الـ api key الغير صحيح

و في الـ index.js (الملف الرئيسي للتطبيق) ستقوم بتسجيل الميدل وير قبل أن تستخدم الـ route

عليك أن تخزن الـ api_key_secret في ملف config باستخدام مكتبة config.js مثلاً كـ environment variable، من الخطير أن تضعه كما هو في تطبيقك

(أعتذر عن عدم كتابة الأكواد هنا، حسوب لديه طريقة غريبة في الـ formatting)

فلاً لا اعرف كيف اشكرك, لقد ساعدتني بفهم شيء مهم, انا اجدها طريقة جميلة وسوف اعمل عليها انشاء الله .

على الرحب، استخدم هذه الطريقة لكل شيء بما فيه الـ validation و الـ user auth و يمكنك استخدامها لدوال معينة بعينها عبر تمريرها كمتغير ثانٍ

هذا يساعد في كتابة clean code