رؤى متعمقة حول حلول APISIX للطلبات العابرة للأصول
January 27, 2024
في تطوير تطبيقات الويب، أصبحت مشكلات العبور عبر النطاقات موضوعًا شائعًا. ومع ذلك، مع الانتشار الواسع لبوابات API، أصبح لدينا الآن حل أكثر ملاءمة وفعالية لمعالجة مشكلات العبور عبر النطاقات. تعتبر بوابة API، كمكون رئيسي في بنية التطبيق، لا توفر فقط وظائف مثل توجيه الطلبات وإدارة API، ولكنها أيضًا تتعامل بشكل فعال مع طلبات العبور عبر النطاقات، مما يساعد المطورين على تجاوز قيود سياسة نفس النطاق التي تفرضها المتصفحات. سيتعمق هذا المقال في كيفية استخدام بوابة API APISIX لحل مشكلات العبور عبر النطاقات.
ما هو العبور عبر النطاقات؟
تنشأ مشكلات العبور عبر النطاقات بشكل رئيسي من سياسة نفس النطاق التي تفرضها المتصفحات. تتطلب سياسة نفس النطاق أن يكون مصدر الطلب (البروتوكول، النطاق، المنفذ) مطابقًا تمامًا للمورد الهدف؛ وإلا، سيقوم المتصفح بحظر الطلب. تهدف هذه السياسة إلى حماية أمان معلومات المستخدم ومنع المواقع الضارة من سرقة البيانات. ومع ذلك، في التطوير العملي، غالبًا ما تؤدي سيناريوهات مثل فصل الواجهة الأمامية عن الخلفية أو النشر مع نطاقات أو منافذ مختلفة إلى مشكلات العبور عبر النطاقات.
حل مشكلات العبور عبر النطاقات باستخدام APISIX
CORS (مشاركة الموارد عبر النطاقات)
CORS (مشاركة الموارد عبر النطاقات) هو معيار W3C يتيح للمتصفحات إرسال طلبات إلى خوادم عبر النطاقات، مما يتجاوز القيود التي تفرضها سياسة نفس النطاق. في APISIX، يمكن للمطورين بسهولة تكوين قواعد CORS باستخدام إضافة CORS، وتحديد المصادر المسموح لها بالوصول إلى الموارد.
مثال على استخدام الأمر curl لتكوين CORS في APISIX:
curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "uri": "/hello", "plugins": { "cors": {} }, "upstream": { "type": "roundrobin", "nodes": { "127.0.0.1:8080": 1 } } }'
يستخدم هذا الأمر curl
لإرسال طلب PUT إلى واجهة برمجة التطبيقات الإدارية لـ APISIX، لإنشاء مسار بمعرف 1. تم تكوين المسار مع مسار URI /hello
، وتم تمكين إضافة CORS بالتهيئة الافتراضية. بالإضافة إلى ذلك، تم تحديد الخادم الهدف كـ 127.0.0.1:8080
.
عند تنفيذ طلب اختبار، سيتم الحصول على نتائج التهيئة الافتراضية:
curl http://127.0.0.1:9080/hello -v
...
< Server: APISIX web server
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Methods: *
< Access-Control-Allow-Headers: *
< Access-Control-Expose-Headers: *
< Access-Control-Max-Age: 5
...
إذا كانت هناك حاجة لإجراء تعديلات على سياسة CORS، يمكن ببساطة تعديل تكوينات الإضافة ذات الصلة. فيما يلي عدة خيارات تكوين شائعة الاستخدام:
-
allow_origins
: يحدد المصادر المسموح لها بالوصول عبر النطاقات. يمكن أن يكون عنوان URL محددًا أو استخدام النجمة '*' للسماح لجميع المصادر. يتم فصل القيم المتعددة بفواصل. -
allow_methods
: يحدد طرق HTTP المسموح بها للوصول عبر النطاقات، مثل GET، POST، إلخ. يتم فصل القيم المتعددة بفواصل. -
allow_headers
: يسمح بحقول الرأس المخصصة التي يمكن حملها في طلبات العبور عبر النطاقات. يتم فصل القيم المتعددة بفواصل. -
expose_headers
: يحدد حقول الرأس المخصصة التي يمكن كشفها في استجابات العبور عبر النطاقات. يتم فصل القيم المتعددة بفواصل. -
max_age
: يحدد الحد الأقصى للوقت الذي يمكن للمتصفح تخزين استجابات CORS فيه. -
allow_credentials
: يحدد ما إذا كان سيتم السماح بحمل بيانات الاعتماد (مثل الكوكيز) في طلبات العبور عبر النطاقات.
نقاط يجب الانتباه إليها
يجب الانتباه بشكل خاص إلى أن استخدام CORS سهل، ولكن تمكينه قد يؤدي إلى مشكلات أمنية. هذا بشكل رئيسي لأن CORS يخفف من القيود التي تفرضها سياسة نفس النطاق، مما يسمح لطلبات من مصادر مختلفة بالوصول إلى الموارد.
في هذا السياق، دعونا نركز على allow_credentials
. يعتبر allow_credentials
عنصر تكوين مهم في CORS، حيث يحدد ما إذا كان سيتم السماح لطلبات العبور عبر النطاقات بحمل معلومات المصادقة. يتضمن ذلك، ولكن لا يقتصر على البيانات الحساسة، بما في ذلك الكوكيز، معلومات مصادقة HTTP، أو شهادات SSL للعميل.
بشكل افتراضي، يتم تعطيل allow_credentials
، مما يعني أنه لا يسمح بحمل معلومات المصادقة. ومع ذلك، إذا تم تمكين CORS، وتم السماح بحمل معلومات المصادقة (allow_credentials: true
)، يجب توخي الحذر الإضافي. هذا يعني أن الطلبات من مصادر أخرى يمكنها أيضًا الوصول إلى الموارد المحمية، مما قد يؤدي إلى تنفيذ عمليات حساسة. على سبيل المثال، قد يستغل موقع ضار هذا الخلل في التكوين لإقناع المستخدمين ببدء طلبات العبور عبر النطاقات، مما يؤدي إلى سرقة كوكيز الجلسة أو تنفيذ إجراءات غير مصرح بها.
لتقليل المشكلات الأمنية المحتملة عند تمكين طلبات العبور عبر النطاقات، يُنصح باتباع أفضل الممارسات التالية:
- تكوين
allow_origin
بعناية: تجنب تعيينallow_origin
إلى*
(السماح لجميع المصادر) بشكل عشوائي. بدلاً من ذلك، حدد المصادر المسموح بها بشكل صريح. - تقييد
allow_credentials
: قم بتمكينallow_credentials
فقط عند الضرورة واقصره على المصادر الموثوقة. - استخدام بروتوكول نقل آمن: تأكد من أن طلبات CORS يتم نقلها عبر HTTPS لمنع هجمات الرجل في المنتصف.
- التحقق والتفويض: على الخادم الخلفي، قم بتنفيذ عمليات التحقق والتفويض المناسبة لطلبات العبور عبر النطاقات، للتأكد من أن المستخدمين المصرح لهم فقط يمكنهم الوصول إلى الموارد الحساسة.
- تجنب استخدام طرق HTTP غير الآمنة: قيد طرق HTTP المستخدمة في طلبات العبور عبر النطاقات، واسمح فقط بالطرق الآمنة مثل GET و POST، بينما قم بتعطيل الطرق المحفوفة بالمخاطر مثل PUT و DELETE، والتي قد تشكل مخاطر أمنية.
الوكيل العكسي
بالإضافة إلى استخدام CORS، يمكن لـ APISIX معالجة مشكلات العبور عبر النطاقات بشكل غير مباشر عن طريق تكوين نفسه كـ وكيل عكسي. الوكيل العكسي هو نمط شائع لبنية الخادم حيث يعمل الوكيل العكسي كوسيط بين العميل والخادم الهدف. عندما يبدأ العميل طلبًا، يتم إرسال هذه الطلبات أولاً إلى خادم الوكيل العكسي، الذي يقوم بعد ذلك بإعادة توجيهها إلى الخادم الهدف الفعلي. بمجرد اكتمال المعالجة، يتم إرجاع الاستجابة من الخادم الهدف إلى الوكيل العكسي، والذي بدوره يعيدها إلى العميل.
من المهم فهم أن الوكيل العكسي نفسه لا يحل مشكلات العبور عبر النطاقات بشكل مباشر، ولكنه يتجاوز بشكل ذكي قيود سياسة نفس النطاق التي تفرضها المتصفحات. عندما يحتاج العميل إلى إجراء طلب عبور عبر النطاقات، فإنه في الواقع يرسل الطلب إلى خادم الوكيل العكسي بدلاً من إرساله مباشرة إلى الخادم الهدف. نظرًا لأن خادم الوكيل العكسي والخادم الهدف عادة ما يكونان في نفس بيئة الشبكة أو التكوين، فإن اتصالهما لا يخضع لقيود سياسة نفس النطاق. هذا يسمح لخادم الوكيل العكسي بإعادة توجيه طلبات العميل بحرية إلى الخادم الهدف وإرجاع الاستجابات إلى العميل، مما يحقق بشكل غير مباشر هدف الوصول عبر النطاقات.
نظرًا لأن APISIX يعمل كبوابة API، فإنه يتم وضعه بشكل طبيعي بين العميل والخادم. لذلك، في التطبيقات الأصغر حجمًا، يمكن نشر تطبيق العميل و APISIX في نفس النطاق، وتعديل عنوان طلب العميل إلى عنوان خدمة APISIX لضمان وصول العميل بسلاسة إلى APISIX. يمكن الاستفادة من وظيفة الوكيل العكسي لتوفير وصول عبر النطاقات للعميل. بالإضافة إلى ذلك، يمكن دمج إضافات أخرى لضمان أمان وموثوقية عملية الاتصال بأكملها.
الخلاصة
في هذا المقال، استكشفنا كيفية استخدام APISIX لحل مشكلات العبور عبر النطاقات، مع التركيز على طريقتين: CORS والوكيل العكسي. من خلال تكوين إضافة CORS بشكل مناسب، يمكننا تخفيف قيود سياسة نفس النطاق التي تفرضها المتصفحات، مما يسمح لطلبات العبور عبر النطاقات بالوصول إلى الموارد. من ناحية أخرى، يعمل الوكيل العكسي كوسيط، مما يتجاوز سياسة نفس النطاق للمتصفحات ويسهل الوصول عبر النطاقات. لكل طريقة مزاياها، ويعتمد اختيار الحل المناسب على المتطلبات المحددة. سواء كان استخدام CORS أو الوكيل العكسي، يوفر APISIX وظائف مرنة وقوية، مما يساعد المطورين على حل مشكلات العبور عبر النطاقات بسلاسة وضمان التشغيل الطبيعي وتجربة المستخدم للتطبيقات.