الفحص والجودة

الفاحص الأمني — 8 فحوصات

ثمانية فحوصات تقرأ ملفات مشروعك بحثاً عن الثغرات الشائعة، بأربعة مستويات خطورة ودرجة أمان من 100.

في هذه الصفحة

الفحوصات الثمانية

الفحصالخطورةما يبحث عنهالإصلاح
exposed-secretحرِجمفتاح أو كلمة سر مكتوبة داخل الكود خارج ملف .envانقل القيمة إلى .env واقرأها من متغيرات البيئة
sql-injectionحرِجاستعلام SQL مبني بـ template literal يحقن متغيراً في نص الاستعلاماستخدم استعلامات ذات معاملات أو Prisma
eval-usageعالٍاستدعاء eval() — يسمح بتنفيذ كود عشوائياستبدله بـ JSON.parse أو منطق صريح
xss-riskعالٍاستخدام innerHTML في ملف يتعامل مع مدخلات المستخدماستخدم textContent أو نظّف المدخلات
public-secretعالٍمتغير يحمل SECRET أو KEY ببادئة NEXT_PUBLIC_ في .envأزل البادئة — أي متغير بها يُرسل إلى المتصفح
insecure-httpمتوسطروابط http:// غير مشفّرة (عدا localhost)حوّلها إلى https://
dangerous-htmlمتوسطاستخدام dangerouslySetInnerHTMLنظّف المحتوى قبل حقنه أو تجنّب HTML الخام
no-csrfمنخفضمسار API يستقبل POST بلا أي إشارة إلى رمز حمايةأضف تحقّق CSRF أو رمز مصادقة

كل نتيجة تحمل اسم الملف، ورقم السطر في الفحوصات التي تعمل سطراً بسطر مثل exposed-secret.

الدرجة

الخطورةالخصم لكل مشكلة
حرِج25
عالٍ15
متوسط8
منخفض3

أكثر خطأ يتكرر: المفاتيح في الكود

هذا النمط هو ما تمسكه قاعدة exposed-secret:

// ❌ المفتاح مكتوب في الكود ويُرفع مع المشروع
const apiKey = "sk_live_9f2c8ab41d7e5063";

والشكل الصحيح:

// ✅ القيمة في .env ولا تغادر الخادم
const apiKey = process.env.PAYMENT_API_KEY;

مع التنبّه إلى أن نقل المفتاح إلى .env لا يكفي وحده إذا كان قد رُفع من قبل إلى Git — المفتاح المكشوف مرة واحدة يجب تدويره، لا إخفاؤه.

للتهيئة لمحركات البحث راجع فاحص SEO، وللحجم وسرعة التحميل راجع فاحص الأداء. وإن كان مشروعك يتعامل مع بيانات حسّاسة، فخدمة الأمن السيبراني تغطي ما لا يصل إليه فاحص آلي.

أسئلة شائعة

كيف تُحسب درجة الأمان؟

تبدأ من 100 ويُخصم 25 لكل مشكلة حرجة، و15 لكل مشكلة عالية، و8 لكل متوسطة، و3 لكل منخفضة. مشكلتان حرجتان وحدهما تنزلان الدرجة إلى 50.

هل الفاحص يغني عن مراجعة أمنية؟

لا. الفاحص يقرأ الكود بحثاً عن أنماط معروفة، فهو يمسك الأخطاء الشائعة بسرعة لكنه لا يفهم منطق تطبيقك ولا يختبره وهو يعمل. للأنظمة التي تتعامل مع مدفوعات أو بيانات شخصية تلزم مراجعة بشرية.

ظهرت مشكلة أعرف أنها ليست خطأ — ماذا أفعل؟

بعض القواعد تعتمد على أنماط نصية وقد تنتج إنذاراً كاذباً، مثل dangerouslySetInnerHTML مع محتوى مُنظَّف مسبقاً. راجع الحالة وتجاهلها بوعي؛ الأهم ألا تتجاهل الحرِج والعالي.

لماذا يُعد NEXT_PUBLIC_ خطراً؟

لأن Next.js يستبدل كل متغير ببادئة NEXT_PUBLIC_ داخل حزمة المتصفح وقت البناء. المتغير السري بهذه البادئة يصبح مقروءاً لأي زائر يفتح أدوات المطوّر.