عموميات حول البروتوكول HTTP للدخول إلى مجال RESTful API

1



لأن اتجاه صناعة البرمجيات في الآونة الأخيرة بدأ يتجه نحو نمط REST الذي يسمح بالوصول إلى خدمات الويب من خلال بروتوكول HTTP، بحيث يصير من السهل استعمال هذه الخدمات في مختلف الأنظمة والأجهزة لأن هذا البروتوكول متعارف عليه من قبل الجميع (أشخاص وأنظمة).
فإنني أنصح جميع الإخوة والأخوات أن يتجهوا نحو هذا المجال لأنه في نظري ركيزة الحاضر والمستقبل إن شاء الله.
ولمن لم يسبق له أن سمع بمصطلح REST أو RESTful API أو HTTP-based services فهذه المقالة قد توضح له بشكل عام هذا النمط، والمبادئ التي يقوم عليها.
لكن من أجل الغوص أكثر في هذا المجال، لابد لنا من الاطلاع على الحد الأدنى من المعلومات الخاصة بكيفية اشتغال بروتوكول HTTP وهو ما سنتعرف عليه في هذه المقالة إن شاء الله.

يسمح لنا بروتوكول HTTP بالقيام بعدة مهام على الويب، استعراض صفحات المواقع، إرسال البيانات إلى السيرفر، وتتم هذه العمليات عبر آليات يقدمها هذا البروتوكول وتسمى بالأفعال Verbs أو وظائف Methods، ولعلنا نعرف مسبقا أنه من ضمن هذه الأفعال نجد GET وPOST ، كل من هذين الفعلين يشتغل في ظرفية معينة، حينما نأتي على سبيل المثال وندخل إلى الرابط التالي:


فإن المتصفح الذي نستعمله يعرف من مقدمة الرابط أعلاه أن العملية عبارة عن طلب من نوع Http أو ما يعرف ب http Request، فيقوم بفتح صفحة الموقع.
ويمكن لطلبات http أن تكون من نوع GET أو من نوع POST، نستعمل GET حينما نريد جلب Resource معينة، كاستعراض صفحة، تحميل صورة، وما إلى ذلك، ونستعمل POST verb حينما نريد أن نرسل البيانات إلى الخادم، مثلا الاشتراك في موقع، كتابة تعليق، وما إلى ذلك من عمليات تستلزم إرسال البيانات إلى الخادم.
يعتبر فعل GET فعلا آمنا safe verb، لأنه لا يؤثر على Resource بل يقوم فقط باستعراضها، بينما يعد الفعل POST فعلا غير آمن unsafe verb لأنه يقوم بإرسال بيانات إلى السيرفر، لذلك إذا قمت بعمل تحديث للصفحة في وضع GET سيتم جلب آخر حالة لل Resource بينما إذا قمت بتحديث الصفحة في وضع POST فإن المتصفح سيسألك عبر رسالة تأكيدية.
توجد بعض الأفعال الأخرى التي يقدمها Http، نذكر بعضها في هذا الجدول:

الفعل
مثال على الرابط
الوصف
GET
http://localhost/courses
جلب جميع الدورات
GET
http://localhost/courses/1
جلب الدورة التي معرفها 1
POST
http://localhost/courses
إنشاء دورة جديدة
DELETE
http://localhost/courses/1
حذف الدورة التي معرفها 1
PUT
http://localhost/courses/1
تحديث الدورة التي معرفها 1
PATCH
http://localhost/courses/1
التحديث الجزئي للدورة التي معرفها 1
OPTIONS
http://localhost/courses/1
جلب العمليات المتوفرة على Resource
HEAD
http://localhost/courses/1
جلب http header فقط

تسمح لنا هذه الأفعال بتحديد طبيعة المهمة التي على URI القيام بها، إذ يكفي أن نحدد الفعل المرتبط بال URI ليتم تنفيذه.
يمكننا باستعمال بعض الأفعال السابقة أن نقوم بالعمليات الأساسية على البيانات فقط من خلال تحديد URI والفعل المناسب له، ونتحدث هنا عن عمليات CRUD والتي ترمز ل Create, Read, Update and Delete. وهو العمل الذي تقوم به تطبيقات REST حيث تستفيد من هذه الأفعال من أجل القيام بعمليات على الموارد Resources.
نكتفي بهذا القدر، دام لكم البشر والفرح!

عموميات حول نمط REST لبناء تطبيقات ويب حديثة قائمة على HTTP

0


مقدمة: ما هو REST؟

هي اختصار ل Representational State Transfert، وهي عبارة عن نمط بنيوي Architectural Style يهدف إلى الاستفادة من مزايا بروتوكول HTTP لتفادي تعقيدات النمط السابق الذي كان يعتمد على بروتوكول Soap كما هو الحال في web services، ويسمح لنا نمط REST بتفادي تكرار المهام، خاصة وأن بروتوكول HTTP يقدم مسبقا مجموعة من الوظائف التي تسمح لنا بالقيام بالعمليات على الموارد resources  هذه العمليات من قبيل الإضافة، الحذف، التعديل، الاستعراض وما إلى ذلك، كما يتميز نمط REST بكونه أكثر قياسية more standardized مقارنة ب Soap ونقصد بالقياسية هنا أن مكونات HTTP متعارف عليها ومفهومة من قبل الأشخاص والتطبيقات والأنظمة.
بالإضافة إلى العديد من المزايا الأخرى التي تجعل نمط REST يفرض وجوده في مجال تطوير الخدمات مؤخرا.
وحتى نختصر الأمر برمته، يمكننا القول إن الغرض الأساسي من نمط REST هو الاستفادة الكاملة من مزايا HTTP في بناء الخدمات، وتسمى هذه الخدمات RESTful API أو HTTP-based services.

ماهي مبادئ REST؟

يقوم أسلوب REST على مجموعة من المبادئ وهي كما يلي:

1. مبدأ خادم / عميل Client / Server

مبدأ خادم / عميل، والذي نقصد به أن العميل يرى فقط URI وتمثيل Resource (أي نتيجة التنفيذ: صورة، بيانات، ...)، بينما لا يستطيع أن يرى أين يتم تخزين Resource، وبالمقابل فإن الخادم لا ينبغي أن يعرف هل العميل يملك Resource معين، بمعنى أن المهام موزعة بين الخادم والعميل وبالتالي الأمور الداخلية للخادم والعميل ممكن أن تتغير دون أي تأثير على المكون الآخر.

2. مبدأ الحالة الموحدة Uniform Interface

النواة الأساسية في خدمات REST هي resource، والذي نقصد به المكون الذي نتعامل معه إما بالقراءة، أو الإضافة، أو التعديل أو الحذف وما إلى ذلك، هذا المكون في الحقيقة هو أي شيء يمكننا الوصول إليه من خلال رابط URI، وليس شرطا أن يكون ملفا كالصورة أو الفيديو أو ملف مضغوط وما إلى ذلك، بل من الممكن أن تكون resource منتوج، مقالة، طالب، وظيفة، يعني أي عملية على كلاس معين تسمح لنا بالوصول إليها من خلال رابط URI.
ويعتبر هذا الرابط معرفا لل Resource إذ أنه يكون متفردا وغير متكرر، ولا يمكن لل URI الواحد أن يؤشر لأكثر من Resource، على سبيل المثال لو عندك رابط لتحميل ملف معين، فهذا الرابط يمثل معرفا لهذه Resource وعند الدخول إلى هذا URI سيأخذك إلى الملف الخاص به وليس إلى Resource أخرى، ويسمى هذا المبدأ في نمط REST بالواجهة المحددة Uniform Interface أي أن كل Resource لها Identifier يسمح بالوصول إليها.
ليس بالضرورة أن يكون Resource المحصل عليه من URI ملفا، ممكن أن يكون بيانات خاصة بأوبجكت معين، كما ذكرنا قبل قليل، كأن يكون مقالة إن كانت API الخاصة بنا تتعامل مع المقالات، أو ممكن أن تكون وظيفة إن كانت API تتعامل مع الوظائف وهكذا دواليك.
باختصار أي شيء يمكننا الوصول إليه عبر URI، فهو Resource.

3. مبدأ انعدام الحالة Statelessness

من بين مبادئ REST أيضا، أن السيرفر لا ينبغي أن يخزن معلومات حول Client، ويعني هذا الكلام أن العميل حينما يرسل طلبا Request للخادم، فإن هذا الأخير يقوم بجلب البيانات من قاعدة بيانات، ويقوم بإرسال الجواب Response إلى العميل، بعد إرسال الجواب إذا تغيرت البيانات في المكان المخزنة فيه فإن العميل لا يصله خبر بذلك.
ويسهم مبدأ انعدام الحالة في تحسين عمل السيرفر لأنه يتعامل مع كل Request بشكل مستقل دون الحاجة أن يحفظ معلومات عن Client مما يضمن سرعة أداء السيرفر وقدرته على الرد على طلبات العملاء الآخرين.
ويسمى هذا المبدأ بانعدام الحالة Statelessness.
كما يعني انعدام الحالة أيضا أن السيرفر لا ينبغي له أن يستعمل Sessions أو أي آلية من آليات تخزين معلومات العميل، وأن كل طلب غير مرتبط بالطلبات السابقة أو اللاحقة.

4. مبدأ قابلية الإخفاء Cacheability

يرتكز نمط REST أيضا على مفهوم الإخفاء Cache والذي يعني أن على السيرفر إمداد العميل بمعلومات إخفاء Resource وذلك بغرض تسهيل عملية التصفح، بحيث إذا تمكنا من إدارة عملية الإخفاء بشكل جيد فإننا سنتفادى العديد من إرسال الطلبات إلى السيرفر لأن البيانات التي نحتاجها ستكون مخزنة محليا في Cache. 

5. مبدأ نظام الطبقات Layered System

قلنا مسبقا أن العميل يعرف فقط القليل عن الخادم (هذا القليل يتمثل في URI وResource Representation)، فهو لا يعرف على سبيل المثال هل هو متصل مباشرة بالخادم، أم أنه يمر عبر وسيط Proxy، أو خادم بيني، ...
ويسمى هذا المبدأ في REST بنظام الطبقات Layered System.

6. مبدأ الكود عند الطلب Code on Demand

يمكن للخادم أيضا أن يرسل أكواد تنفيذية للعميل للقيام بعمليات معينة، كأن يتم تمرير أوامر جافا سكريبت إلى العميل، ويسمى هذا المبدأ بمبدأ الكود عند الطلب Code on Demand.

خاتمة

بعد أن تعرفنا على أساسيات نمط REST سوف نتعرف على تطبيقاته مع ASP.NET Web API من خلال عدة مقالات ننشرها تباعا هنا على المدونة، وكذلك من خلال دورة مرئية سنقوم ببثها على قناتنا في اليوتيوب إن شاء الله.
دام لكم البشر والفرح !

الفرق بين أدوات التحكم في الحزم Nuget و Bower و NPM في الدوت نيت

1

مقدمة

قبل زمن أدوات التحكم في الحزم Package Manager Tools كنا نعاني في تحميل وتضمين المكتبات اللازمة، والحرص على اختيار الإصدارات المناسبة، وكما هو معلوم فإن التعامل اليدوي مع الأدوات البرمجية قد يسبب مشاكل سواء في زمن التطوير أو عند الانتهاء والشروع في التحزيم.

أداة Nuget Package Manager

قامت ميكروسوفت بإدراج أداة Nuget Package Manager عام 2010 في الفيجوال ستوديو لتسهيل عملية التحكم في المكتبات والحزم البرمجية بواجهة مبسطة نراها في الصورة التالية:


اعتدنا بصفتنا مبرمحين تابعين لنطاق العمل دوت نيت على أداة Nuget Package Manager من أجل التحكم في الحزم والمكتبات التي نريد إدراجها في مشاريعنا، لكن مؤخرا ظهرت بعض الأدوات الأخرى التي تستعمل تقريبا لنفس الغرض مع اختلاف طفيف في دواعي الاستعمال، حيث صرنا نجد أداة Bower وأداة NPM، فما هما هذان الأداتان وفيما تستخدمان؟

بالنسبة للأداة المخضرمة Nuget Package Manager فهي صارت موجهة خصيصا للتعامل مع الحزم والمكتبات الخاصة بالدوت نيت .NET Assemblies مع العلم أنه يمكننا استعمالها أيضا في التعامل مع المكتبات المتعلقة ب Front-end، لكن لا ينصح بذلك في ظل توفر أدوات مخصصة لذلك، إذن باختصار فأداة Nuget Package Manager صار استعمالها خاصا بمكتبات الدوت نيت.

أداة Bower

أما أداة Bower فهي مخصصة للتعامل مع المكونات المتعلقة ب Front-end، مثل ملفات جافاسكريبت و CSS، وتتميز أداة Bower بكونها تسهم في تقليل زمن تحميل الصفحات عبر اعتمادها على آلية Flat dependency graph والتي تعني أن أداة Bower تقوم بترشيد تحميل مكونات Front-end، على سبيل المثال لو مشروعك يحتوي على مجموعة من الحزم التي تحتاج إلى jQuery فإن Bower سيقوم بتحميل مكتبة jQuery مرة واحدة على الرغم من تعدد الارتباطات dependencies مما يساعد على تسريع تحميل الصفحات.


للاطلاع أكثر على أداة Bower يمكن العودة إلى الموقع الرسمي للأداة:
https://bower.io/

أداة NPM

الأداة الأخرى التي صار بإمكاننا استعمالها في الدوت نيت لإدارة المكتبات والحزم هي أداة NPM والتي صممت في الأصل لأجل مكتبة NodeJS ومنه أخذت تسميتها ب NPM اختصارا ل Node Package Manager، وهي تختلف عن أداة Bower في طريقة تعاملها مع المكتبات حيث معروف أن NPM تدعم خاصية Nested Dependencies، مما يعني بشكل مبسط أنها تسمح بتضمين أكثر من إصدار لنفس المكتبة في المشروع.
يمكنك الاطلاع أكثر على أداة NPM وتحميلها من الموقع التالي:
https://www.nuget.org/

خاتمة

يبقى الغرض من هذه الأدوات هو تسهيل عملية إدارة الحزم والمكتبات في مشاريعنا، لذلك وجب ألا ننظر إليها بعين السخط بسبب تكاثرها وتعددها مما يبعث على الحيرة والتشتيت، وإنما وجب علينا أن نستعملها ونستفيد من مزاياها لتجويد مشاريعنا عبر تنظيم الحزم والمكتبات وإدارة الإصدارات وتسريع تحميل الصفحات.
دام لكم البشر والفرح.


خالد السعداني يحصل على جائزة ميكروسفت MVP

34


السلام عليكم ورحمة الله وبركاته،
أحبتي في الله، حياكم الله، وأهلا وسهلا بكم جميعا في هذا اللقاء الاستثنائي الذي أستهل مطلعه بتقديم الشكر الجزيل والثناء الوفير لكم جميعا على ما تكنونه لنا من مودة صادقة ومشاعر نبيلة، ونسأله تبارك وتعالى أن يديم هذه الآصرة وأن يجعلها خالصة لوجهه الكريم وبعد:
فلأننا أصبحنا عائلة واحدة، أحببت أن أشارككم جائزتي الأخيرة التي توجتني شركة ميكروسوفت بها، وهي جائزة قيمة أتمناها لكل فرد منكم، أتحدث عن جائزة أكثر المحترفين تقييما في مجال الفيجوال ستوديو وتقنيات التطوير، والمعروفة اختصارا ب MVP - Microsoft Most Valuable Professional.
الجائزة أحبتي في الله ذات قيمة معنوية كبيرة، لأنها تمثل اعترافا رسميا من الشركة الراعية للتقنيات التي نتناولها بالشروح بجودة المادة العلمية التي نقدمها، وقد توصلت بهذه الجائزة بعد أن اقترحني أحد أصدقائي الكرام من فرنسا وهو حاصل عليها لعدة سنوات، فقامت ميكروسوفت بمراجعة نتاجنا المعرفي فوجدت أنه يستحق التتويج فأقدمت على هذه الخطوة.
هي خطوة جيدة من غير شك، لها حمولتها المعنوية التي تشي بجودة العمل، ولها دلالتها البناءة التي ستحفزنا لبذل المزيد من العطاء لنقدم صورة إيجابية على بلادنا الإسلامية.
أشكركم مرة أخرى أحبتي الكرام على مشاعركم النبيلة، وعلى حرصكم على تعلم البرمجة واحترافها، لأنكم بذلك تخدمون أنفسكم أولا ومجتمعاتكم ثانيا، فلا تيأسوا أبدا مهما بدا لكم درب البرمجة وعرا، لأن مسافة الميل تبدأ بخطوة.
دام لكم البشر والفرح:

كل ما تحتاج معرفته عن ثغرة XSS

2


ماهي XSS؟

تعد XSS من أشهر الهجمات على الويب والتي تتم عبر حقن موقعك بسكريبت يقوم بتنفيذ أوامر خبيثة على حواسيب الزوار، أي أن موقعك يتحول إلى وسيلة لاصطياد الضحايا عبر سكريبت يزرعه المخترق في موقعك.
في XSS لا يستهدف المخترق موقعك بدرجة أولى، وإنما يستعمله كجسر للعبور إلى الضحايا الذين يتصفحونه، حيث يستغل ثغرة في موقعك يتسلل من خلالها إلى زوار موقعك للهجوم عليهم.
و XSS هي اختصار ل Cross Site Scripting، هل لاحظت شيئا؟
نقول XSS بينما الاختصار ينبغي أن يكون CSS، فلماذا يا ترى؟
حتى لا نخلط بين مسمى الثغرة وبين لغة الأنماط CSS المعروفة، لذلك تم استبدال حرف C ب X دلالة على Cross والتي تعني بالانجليزية شارة التقاطع وهي ترسم على هيئة X، لذلك تسمى Cross Site Scripting اختصارا ب XSS.
نعود ونعرف باختصار، ثغرة XSS هي ثغرة تسمح للمخترق بزرع أو حقن سكريبت بأي لغة يدعمها المتصفح الذي يستعمله زائر موقعك، وغالبا ما يكون هذا السكريبت بلغة جافاسكريبت، وعند تصفح الموقع يتم تنفيذ هذا السكريبت مما يهدد الزائر.

كيف تعمل XSS؟

أولا في هجوم XSS عندنا ثلاث فاعلين وهم كالتالي:
- الضحية وهو زائر موقعك
- الوسيلة أو الجسر وهو موقعك نفسه
- ثم المخترق وهو الذي يستغل موقعك للإيقاع بالزوار
وفي هجوم XSS يقوم المخترق باستغلال إحدى طرق إدخال البيانات إلى الموقع، وليكن مثلا عبر حقول إدخال النص Input Text Fields، فيرسل بيانات على شكل سكريبت، بعد ذلك يتم تنفيذ هذا السكريبت على متصفح الزائر، وتختلف هجمات XSS باختلاف طريقة التعامل مع السكريبت المحقون، إما أن يخزن في قاعدة بيانات ثم ينفذ عند استدعائه، وإما أن ينفذ مباشرة دون أن يحفظ عبر دمجه في رابط معين.
طبعا الكلام مايزال مبهما بعض الشيء، لكن بالمثال يتضح المقال.

ماهي أنواع XSS؟

توجد ثلاثة أنواع من هجمات XSS كلها قائمة على نفس المبدأ المتمثل في استغلال موقع عبر إرسال سكريبت يتم تنفيذه على مستوى متصفح الزائر.
وهذه الأنواع الثلاثة من أنواع XSS كما يلي:
Stored XSS وتسمى كذلك Persistent XSS: وتحدث هذه الثغرة حينما يقوم المخترق باستغلال أحد مدخلات الموقع فيقوم بإرسال سكريبت يتم تخزينه على مستوى سيرفر الموقع وغالبا في قاعدة البيانات Database، كأن يرسل السكريبت من مربع كتابة التعليقات في الموقع، أو على شكل رسالة، أو من أي مكان في الموقع يسمح بتخزين القيم في قاعدة البيانات، وحينما يأتي زائر ليستعرض الصفحة التي تحتوي على القيم القادمة من قاعدة البيانات يتم تنفيذ هذا السكريبت. على سبيل المثال قمت ببرمجة مدونة Blog من أجل نشر المقالات عليها، في إحدى مقالاتك دخل المخترق وبدل أن يكتب لك تعليقا قام بكتابة سكريبت، هذا السكريبت سيتم تخزينه في قاعدة البيانات، وبالتالي حينما سيأتي زائر ما ليستعرض مقالتك سيتم تحميل التعليقات من قاعدة البيانات ومعها التعليق الملغوم.
Reflected XSS وتسمى كذلك Non-persistent XSS، وتحدث حينما يستغل المخترق إحدى مدخلات الموقع دون الحاجة إلى تخزين السكريبت في قاعدة البيانات، فيقوم بإرسال رابط الموقع مدموجا بسكريبت ملغوم إلى الضحية عبر إيميل مثلا، أو من خلال نشر هذا الرابط على موقع ما أو على مواقع السوشيال ميديا، وحينما يضغط الضحية على الرابط سيذهب به إلى الموقع وستم تنفيذ السكريبت المدمج معه وبالتالي سيحصل المخترق على ما يشاء، إما عبر سرقة Cookies أو من خلال KeyLogging أو القيام بعمليات أخرى.
Dom-based XSS: وهو شبيه جدا بالنوع Reflected XSS، غير أنه يرتكز بالأساس على التحكم في Dom الخاص بالصفحة عبر تنفيذ سكريبت مكان إرسال قيمة معينة.

كيف تستطيع جافا سكريبت التأثير على بيانات الزائر؟

تنفيذ جافاسكريبت على متصفح الزائر لا يشكل أي خطر على الإطلاق ماعدا ما سنذكره لاحقا، لأن جافاسكريبت تشتغل في بيئة محدودة الصلاحيات تمنعها من الوصول إلى ملفات المستخدم وإلى نظام التشغيل، ويمكنك تجربة ذلك بنفسك، من خلال فتح مفكرة نوتباد ومحاولة  حذف ملف أو إعادة تسميته من خلال أوامر جافاسكريبت ستجد أن ذلك غير ممكن باستخدام جافاسكريبت لوحدها.
لكن تأتي خطورة جافاسكريبت من قدرتها على الوصول إلى بعض بيانات المستخدم الحساسة ك Cookies، ومن قدرتها على إرسال HTTP Requests لمحتوى معين إلى وجهة معينة من خلال أجاكس أي تستطيع إرسال البيانات إلى السرفر، وكذلك من قدرتها على تعديل HTML  الخاص بالصفحة التي ينفذ عليها سكريبت بسبب DOM methods.
هنا تتجلى الخطورة في تنفيذ أوامر جافاسكريبت على متصفح الزائر، بحيث يكفي تنفيذ أمر document.cookie للحصول على Cookie المرتبط بالموقع ومن ثم إرساله إلى السرفر الخاص بالمخترق من أجل العثور على بعض المعلومات الحساسة مثل معرف Session ID.
أو من خلال تسجيل الحروف Keylogging بحيث يتم قنص الحدث الخاص بالضغط على أزرار لوحة المفاتيح وتسجيل كل ما يتم كتابته وإرساله بعد ذلك إلى سرفر المخترق وقد تشمل النصوص المكتوبة كلمات السر وأرقام بطاقة الائتمان وغيرها..
كما يمكن للمخترق أن يغير DOM الخاص بالصفحة من خلال إضافة فورم إلى الموقع ويضع في action attribute  وجهة الإرسال وبالتالي يمكنه استغلال هذا الأمر في عملية Phishing عبر دفع المستخدم إلى إدخال بعض المعلومات الحساسة وهو يظن أنه يدخلها في الموقع وفي الحقيقة سيتم إرسالها إلى سيرفر المخترق.

أدعو لكم جميعا بالتوفيق والسداد، ودام لكم البشر والفرح !