English | 繁中版 | 简中版 | Azərbaycan | Български | বাংলা | Català | Čeština | Deutsch | Ελληνικά | Español | فارسی | Français | हिंदी | Indonesia | Italiano | 日本語 | 한국어 | ພາສາລາວ | Македонски | മലയാളം | Монгол | Nederlands | Polski | Português (Brasil) | Русский | ไทย | Türkçe | Українська | Tiếng Việt
قائمة تحتوي على أهم الاحتياطات الأمنية حينما تقوم بتخطيط واختبار وإطلاق الـAPI الخاصة بك
- لا تستخدم
Basic Authلكن استخدم المعايير القياسية للمصادقة (مثال JWT, OAuth). - لا تعد اختراع العجلة في
المصادقة،توليد الرموز،تخزين كلمات المرور. قم باستخدام المعايير القياسية. - استخدم
تحديد عدد المحاولاتوالحرمان من الدخول jail featureفي تسجيل الدخول. - استخدم التشفير في كل البيانات الحساسة.
- استخدم مفتاح عشوائي ومعقد (
JWT Secret) لتجعل هجوم التخمين بالقوة brute forcing صعبا جدا. - لا تقم باستخراج خوارزمية التشفير من محتوى رمز الـ JWT. قم بإجبار الرمز البرمجي على استخدام خوارزمية (
HS256أوRS256). - اجعل مدة انتهاء الرمز (
TTL,RTTL) قصيرة قدر الإمكان. - لا تقم بتخزين أي بيانات حساسة داخل محتوى رمز الـ JWT, لأنه يمكن كشف هذه المحتويات بسهولة easily.
- تجنب تخزين الكثير من البيانات. عادةً ما تتم مشاركة JWT في الرؤوس ولديها حد للحجم.
- حدد الطلبات (Throttling) لتتجنب هجوم حجب الخدمة DDoS وهجوم التخمين بالقوة brute-force.
- استخدم HTTPS على الخادوم لتتجنب هجمات التنصت على الطلبات MITM (Man In The Middle Attack).
- استخدم
HSTSheader مع الـ SSL لتتجنب هجمات الـ SSL Strip. - قم بإيقاف تشغيل قوائم الدليل.
- بالنسبة لواجهات برمجة التطبيقات الخاصة، اسمح بالوصول فقط من عناوين IP والمضيفين المدرجين في القائمة البيضاء.
- تحقق دائما من
redirect_uriفي الرمز البرمجي للخادوم لتسمح فقط بقائمة محددة من الروابط. - دائما حاول أن تقوم بالتبادل والرد برمز برمجي وليس بالرمز (لا تسمح
response_type=token). - استخدم متغير
stateفي الرابط مع مزيج عشوائي من الحروف لتمنع هجمات الـ CSRF على عملية المصادقة الخاصة بالـ OAuth. - حدد الصلاحية والنطاق الافتراضي scope، وقم بالتحقق منه مع كل تطبيق.
- استخدم الوسيلة المناسبة HTTP method حسب العملية التي تريد القيام بها :
GET (للقرائة),POST (انتاج أو اضافة),PUT/PATCH (لإستبدال او تحديث), andDELETE (لحذف سجل), و قم بالرد بـ405 Method Not Allowedفي حالة إذا كانت الوسيلة method غير مناسبة . - قم بالتحقق من
content-typeفي رأس الطلب reuest header أو ما يسمى بـ (Content Negotiation) لتسمح فقط بالتنسيقات المدعومة (مثالapplication/xml,application/json, إلى آخره) وقم بالرد بـ406 Not Acceptableإذا كان التنسيق غير ذلك. - قم بالتحقق من
content-typeفي محتوى الطلب نفسه posted data (مثالapplication/x-www-form-urlencoded,multipart/form-data,application/json, إلى آخره). - قم بالتحقق من مدخلات المستخدم لتتجنب الثغرات الشائعة (مثال
XSS,SQL-Injection,Remote Code Execution, إلى آخره). - لا تستخدم أي بيانات حساسة (
credentials,Passwords,security tokens, أوAPI keys) في الرابط ولكن استخدم الطريقة القياسية وهي رأس الطلب الخاص بالمصادقة Authorization header. - استخدم فقط التشفير من جانب الخادم.
- استخدم واجهة للـ API لتستفيد من التخزين المؤقت caching وسياسات تحديد عدد الطلبات Rate Limit policies (مثال
الحصة Quota,التنبية في الارتفاع المفاجئ Spike Arrest,وتحديد عدد الطلبات المتزامنة Concurrent Rate Limit)
- قم بفحص كل النطاقات والروابط للتحقق من كونهم محميين وراء مصادقة authentication لتتجنب المصادقة المكسورة broken authentication.
- يجب تجنب استخدام المعرف الخاص بالموارد. قم باستخدام
/me/ordersبدلا من/user/654321/orders. - لا تقم باستخدام المعرف التلقائي auto-increment. قم باستخدام
UUIDبدلا منه. - لو قمت بمعالجة ملفات XML, تأكد من أن معالجة entity parsing غير مفعلة لتتجنب هجمات
XXE(XML external entity). - لو قمت بمعالجة ملفات XML, تأكد من أن entity expansion غير مفعلة لتتجنب هجمات
Billion Laughs/XML bombمن خلال هجوم exponential entity expansion. - استخدم شبكات تسليم المحتوى CDN لرفع الملفات.
- لو كنت تتعامل مع حجم بيانات ضخم، استخدم عمليات منفصلة Workers, Queues لمعالجة البيانات في الخلفية والرد على المستخدم بسرعة لتجنب حجب الطلب HTTP Blocking.
- لا تترك وضع التصحيح DEBUG mode في حالة التشغيل.
- استخدم مكدسات غير قابلة للتنفيذ عند توفرها.
- استخدم
X-Content-Type-Options: nosniffفي رأس الطلب header. - استخدم
X-Frame-Options: denyفي رأس الطلب header. - استخدم
Content-Security-Policy: default-src 'none'في رأس الطلب header. - احذف الرؤوس headers التي تدل عليك -
X-Powered-By,Server,X-AspNet-Versionإلى آخره. - قم بإجبار إرسال
content-typeمع الرد، لو قمت بالرد بمحتويات من توعapplication/jsonفمن المستحسن أن يكون الرد بcontent-typeapplication/json. - لا تقم بالرد بمعلومات وبيانات حساسة مثل
credentials,Passwords,security tokens. - قم بالرد بكود حالة صحيح status code طبقا للعملية التي تقوم بها. (مثال
200 OK,400 Bad Request,401 Unauthorized,405 Method Not Allowed, إلى آخره).
- مراجعة التصميم الخاص بك والتنفيذ مع وحدة / التكامل اختبارات الاختبار unit/integration tests coverage.
- استخدام عملية مراجعة الرمز البرمجي وتجاهل الموافقة على الرمز البرمجي الذي قمت بكتابته.
- تأكد من أن جميع مكونات الخدمات الخاصة بك يتم فحصها بشكل ثابت بواسطة برامج الفيروسات قبل إرسالها إلى الإنتاج، بما في ذلك المكتبات الخارجية وغيرها من التبعيات.
- قم بإجراء اختبارات الأمان باستمرار (التحليل الثابت/الديناميكي) على التعليمات البرمجية الخاصة بك.
- تحقق من تبعياتك (البرنامج ونظام التشغيل) بحثًا عن نقاط الضعف المعروفة.
- تصميم حل التراجع عن عمليات النشر rollback.
- Use centralized logins for all services and components.
- Use agents to monitor all traffic, errors, requests, and responses.
- Use alerts for SMS, Slack, Email, Telegram, Kibana, Cloudwatch, etc.
- Ensure that you aren't logging any sensitive data like credit cards, passwords, PINs, etc.
- Use an IDS and/or IPS system to monitor your API requests and instances.
- yosriady/api-development-tools - مجموعة من الادوات و المصادر لبناء RESTful HTTP+JSON APIs.
لا تتردد في المساهمة عن طريق أخذ نسخة من هذه القائمة fork، وإجراء بعض التغييرات، وتقديم طلبات المراجعة pull request. أي أسئلة الرجاء مراسلتنا على البريد الإلكتروني team@shieldfy.io.