النتائج 1 إلى 8 من 8

الموضوع: هل استطيع التحقق من دومين من خلال RESTFul

  1. #1
    عضو نشيط جدا
    تاريخ التسجيل
    Jun 2007
    المشاركات
    373

    هل استطيع التحقق من دومين من خلال RESTFul



    السلام عليكم ورحمة الله و بركاته

    لدي بعض الخدمات اقدمها على شكل API للجمهور لمن يريد ان يستخدمها

    حيث اني اقدم نموذج طلب لمن
    يريد استخدام الخدمات و بعدها يحصل على مفتاح خاص به يستخدمه كالتالي على سبيل المثال
    ما اريده رغم اني حاولت كثيراً واتوقع انه لا يمكن عمل مثل هذا الأمر

    هو التحقق من الدومين الذي يأتي منه الطلب
    حتى يتم التأكد من ان المفتاح المستخدم هو فعلاً لهذا الدومين

    حيث لو تم الطلب التالي :

    http://xxxxxx.com/v1/?key=xxxxxxxx

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


    اتمنى ان الجميع فهم المقصود!!
    رغم اني لم اجد المواقع الكبيرة التي تقدم خدمات API سوى تقديم مفتاح فقط
    و هذا يجعل من الأمر قد يكون مستحيل التحقق من الدومين !!!
    لأن خدمات RESTFul قد يتم استخدامها في كل مكان غير المواقع


    ^^^

    احس انه سؤال غبي لأنه يتعارض مع RESTFul و طريقة عملها
    و إن كان صحيح فأحس انه عيب في هذه الطريقة
    و إن كان فعلاً لا يوجد حل فماهو الخيار المناسب لعمل هذا الأمر حتى لو تطلب الأمر
    لترك RESTFul
    أو هل من اقتراحات لتحسين الأمن في عدم استخدام المفتاح غير مالك المفتاح
    بإستثناء اسم مستخدم وكلمة مرور فأنا لا اريد استخدامها

    في انتظاركم







  2. #2
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    اقترح عليك ان تحدد عدد الطلبات كل يوم
    يعني مثلًا المشترك الواحد يستطيع تقصير 1000 رابط في اليوم(خدمة تقصير روابط)

    الحالة الوحيدة السهلة للوصول لكود المشترك هي الجافاسكربت
    وهنا يجب عليك ان تتيح للمشترك اختيارين:
    1)امكانية استخدام الكود من أي host - يعني من أي دومين، أيبي وغيره (wildcard)
    2)امكانية استخدام الكود من هوست\ات محدد\ة

    إذا كان عنده جافاسكربت وحصلت معه مشاكل، يمكن ان يقفل الكود لهوست محدد
    إذا لا ، يمكن ان يستخدم الكود من أي مكان

    يريد حماية اكثر...

    نفرض انه عنده برنامج ديسكتوب ولا يريد اختراقه للوصول إلى الكود
    يستعمل هو نفسه api من موقعه
    يعني يرسل طلب على موقعه، وموقعه يرسل طلب إلى موقعك ويأتي بالنتيجة
    (هذه الطريقة تستعمل عندما يكون لديك موقع وتريد ان تعمل له تطبيق ديسكتوب، إذ ان التطبيق
    لا يتصل بقاعدة البيانات انما بسكربت بينه وبين القاعدة - api)
    هذه اصلا ً الطريقة المنطقية اذ انه اذا وزّع برنامج ديسكتوب وبعد ذلك استغنى عن خدمة موقعك
    أو غيّر الكود عندها تتعطل كل برامج الديسكتوب

    بالنسبة للحصول على معلومات الطرف الطالب جميعها تكون في الكائن request






  3. #3
    عضو نشيط جدا
    تاريخ التسجيل
    Jun 2007
    المشاركات
    373


    اقترح عليك ان تحدد عدد الطلبات كل يوم
    يعني مثلًا المشترك الواحد يستطيع تقصير 1000 رابط في اليوم(خدمة تقصير روابط)
    لكن لا اتوقع انه خيار جيد خاصة لو كانت الخدمة ليست تقصير روابط بل معلومات

    الحالة الوحيدة السهلة للوصول لكود المشترك هي الجافاسكربت
    وهنا يجب عليك ان تتيح للمشترك اختيارين:
    1)امكانية استخدام الكود من أي host - يعني من أي دومين، أيبي وغيره (wildcard)
    2)امكانية استخدام الكود من هوست\ات محدد\ة

    إذا كان عنده جافاسكربت وحصلت معه مشاكل، يمكن ان يقفل الكود لهوست محدد
    إذا لا ، يمكن ان يستخدم الكود من أي مكان
    و هنا ما اريده كيف افعل ذلك في .NET بإستخدام نمط RESTFul
    حاولت ان اقوم بمعرفة الهوست القادم منه الطلب لكن لم انجح



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

    ايضاً حاولت اغير الطريقة بإستخدام WCF لكي اتمكن من استخدام التابع

    WebOperationContext.current.IncomingRequest

    لكن هو نفس التابع HttpContext.Request تقريباً

    --------

    بارك الله فيك اخي احمد على ردك






  4. #4


    الحل الأمثل حسب تصوري هو استخدام طريقة قديمة وهي WebService المبنية على WSDL لتصل لها من عدة اماكن
    فالمستخدم لا يعنيه في النهاية عرض RESTfull ، أيضا هذا ليس سبب صنعها

    وممكن استخدام عدة تقنيات في ان واحد مثلا ريستفل ، WCF وهكذا ، وتترك الخيار للمستخدم لكي يصل لما يريد





    __________________
    بريدي :khalilme (at) hotmail.com
    مطور: ASP.NET, Windows Phone , Desktop Applications

  5. #5
    عضو نشيط جدا
    تاريخ التسجيل
    Jun 2007
    المشاركات
    373


    الحل الأمثل حسب تصوري هو استخدام طريقة قديمة وهي WebService المبنية على WSDL لتصل لها من عدة اماكن
    فالمستخدم لا يعنيه في النهاية عرض RESTfull ، أيضا هذا ليس سبب صنعها

    وممكن استخدام عدة تقنيات في ان واحد مثلا ريستفل ، WCF وهكذا ، وتترك الخيار للمستخدم لكي يصل لما يريد
    بارك الله فيك

    المقصد ليس هذا ما اعنيه يا استاذ خليل



    دعني اوضح ما اقصده
    مثلاً قمت انت بالتسجيل لدي لكي تحصل على الخدمة و بعد تسجيلك

    حصلت على المفتاح API-KEY لكي يخولك الحصول على بيانات الخدمة

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

    قام بإستخدامه شخص آخر من خلال موقع غير موقعك فحينها بإمكانه الحصول على البيانات
    دون مشاكل لأنه يملك مفتاح صالح و هنا يكون لدي موقعين يستخدمون نفس المفتاح

    و لا يمكن ان اعرف من هو صاحب المفتاح الأصل
    لأني لا استطيع ان احصل على الدومين القادم منه الطلب

    و هنا سؤالي هل استطيع عند كل طلب ان اتحقق من الدومين؟ كما افعل مع المفتاح عندما اتحقق منه هل هو صالح أم لا؟

    هل يمكن اضافة عنوان رأسي يحمل الدومين القادم منه الطلب على سبيل المثال

    اتمنى فهمت ما اعنيه...





    التعديل الأخير تم بواسطة عبدالله حسن ; 11-06-2011 الساعة 08:48 PM

  6. #6
    عضو نشيط جدا
    تاريخ التسجيل
    Jun 2007
    المشاركات
    373


    الحمدلله

    كانت هناك إضافة في الصفحة التي اختبرها تقوم بتعديل طريقة النداءات ajax و get في jQuery
    لذلك طلقت الإضافة بالثلاث
    لأنها اخذت الوقت الكثير و تلاعبت بي و بنتائج الطلبات

    فقمت بحذف الإضافة و استخدام النداءات مباشرة من core
    و بالفعل كان يرسل عناوين رأسيه تحمل دومين الموقع القادم منه الطلب
    عبر العناوين الرأسية التالية لذلك سأستخدمها في التحقق
    العناوين الرأسية هي
    Origin
    Referer

    رغم انه ليس حل كامل قد يمكن التلاعب بالعناوين كما كانت الإضافة تقوم به .. لكن شئ احسن من لا شئ
    أيضاً لا ادري عن الخيارات الأخرى عندما يتم استخدام الخدمة عبر طرق أخرى غير الجافا هل سيرسل تلك العناوين ام لا
    على العموم سأقوم بتجربة اغلب الطرق قد يكون هناك امور اخرى يتم التحقق منها..




    شكراً لكم احمد , خليل على ردودكم





    التعديل الأخير تم بواسطة عبدالله حسن ; 12-06-2011 الساعة 03:17 PM

  7. #7
    عضو سوبر نشيط
    تاريخ التسجيل
    Aug 2004
    المشاركات
    932


    قم بالاستفادة من HTTP
    أو قم بجلب الـ Remote IP والذي يمكنك من خلاله معرفة من قام بإرسال الطلب (باعتبار أن الطلب يتم إرساله من سيرفر على الإإنترنت والذي بدوره يمتلك Static IP ) 





    __________________
    نحن أمة إقرأ التي لا تقرأ

  8. #8
    عضو نشيط جدا
    تاريخ التسجيل
    Jun 2007
    المشاركات
    373


    قم بالاستفادة من HTTP
    أو قم بجلب الـ Remote IP والذي يمكنك من خلاله معرفة من قام بإرسال الطلب (باعتبار أن الطلب يتم إرساله من سيرفر على الإإنترنت والذي بدوره يمتلك Static IP )

    ما الفائدة !!!

    إذا لم اعرف الموقع الذي اتى منه الطلب مثلاً www.google.com
    لن استطيع ان احصل على Remote IP

    و القضية كلها كيف احصل على الدومين و بإمكانك مراجعة الردود في الأعلى لتفهم
    ما اقصده


    على العموم ما توصلت بعد ان جربت الكثير من الطرق انه قد يكون شبه مستحيل
    فمثلاً لو شخص قام بإستخدام HttpWebRequest للوصول لبيانات الخدمة
    فلن استطيع ان اعرف اي شئ










ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض