// docs / security guides / cursor checklist
قائمة فحص أمان Cursor: 28 عنصرًا قبل الإطلاق
البناء باستخدام Cursor؟ تعتبر ميزات الإكمال التلقائي ووضع الملحن والوكيل لـ Cursor قوية بشكل استثنائي - وتؤدي إلى إنشاء نقاط عمياء أمنية يمكن التنبؤ بها. تستهدف قائمة التحقق هذه أنماطًا محددة Cursor: تضمين مفتاح دور الخدمة، والملفات الكاملة التي أنشأها الملحن دون مراجعة، والأوامر الطرفية لوضع الوكيل، وملف <code>.cursorrules</code> كأول حاجز حماية أمني. 28 عنصرًا عبر الأسرار وقاعدة البيانات والمصادقة والرؤوس والنشر وCursor-المشاكل المحددة.
PRE = النشر المسبق (تدقيق المصدر). DEPLOY = في وقت النشر. POST = التحقق بعد النشر. تشير العناصر إلى FixVibe وتحقق من المعرفات في النموذج category.check-id عند الاقتضاء.
الأسرار ومفاتيح API (5 عناصر)
يتم تدريب الإكمال التلقائي لـ Cursor على تعليمات برمجية مفتوحة المصدر حيث تكون الأسرار شائعة. يقترحها النموذج بحرية، خاصة بعد محاولة المصادقة الفاشلة.
- PRE — Write security rules into
.cursorrules. أضف سطرًا: "لا تقم مطلقًا بتضمينSUPABASE_SERVICE_ROLE_KEYأوsk_live_*أو أي env var يبدأ باختصار الموفر في التعليمات البرمجية من جانب العميل. استخدم دائمًا عمليات الاستيراد من الخادم فقط." Cursor يقرأ.cursorrulesويضعه في الاعتبار في كل اقتراح. - PRE — Audit Composer-generated files. عندما يقوم الملحن Cursor بإنشاء ملف كامل (خاصة معالجات المصادقة)، قم بمراجعته سطرًا تلو الآخر. يقوم الملحن أحيانًا بتضمين env vars الذي يجب أن يبقى للخادم فقط. ابحث عن
NEXT_PUBLIC_أو المراجع المباشرة لمفاتيح الخدمة في عمليات استيراد المكونات. - PRE — Reject auto-imports of service clients into client components. إذا قام Composer باستيراد
import { supabase } from '@/lib/supabase/service'إلى ملف React، فاحذفه على الفور وقم بتوجيهه عبر نقطة نهاية API بدلاً من ذلك. يتم وضع علامة واضحة على عمليات الاستيراد الخاصة بالخادم فقط، فلا تتخطاها. - PRE — Scan Agent-mode commits. يقوم وضع الوكيل بتشغيل الأوامر الطرفية ويمكنه الالتزام مباشرة. قم بتدقيق
git log --oneline -20وgit diff HEAD~5للتأكد من عدم الالتزام بأي سلاسل تبدو سرية أثناء تشغيل الوكيل. - POST — Run secrets.browser-storage. الفحص السلبي على URL المنشور. إذا ظهر مفتاح خدمة في الحزمة JS، فقم بتدويره على الفور - ربما يكون الإكمال التلقائي لـ Cursor مضمنًا فيه.
التحكم في الوصول إلى قاعدة البيانات (4 عناصر)
غالبًا ما يقوم الملحن بإنشاء رمز مصادقة صالح ولكنه يتخطى RLS - لحظة "إنه يعمل" تعمي الأشخاص عن تنفيذ السياسة المفقودة.
- PRE — Force Cursor to generate migrations with RLS. في
.cursorrules: "يجب أن تتضمن كل عملية ترحيلCREATE TABLE public.*ALTER TABLE ... ENABLE ROW LEVEL SECURITYوFORCE ROW LEVEL SECURITY." ثم اطلب من Composer إنشاء الترحيل. - PRE — Review Composer-generated policies. يكتب الملحن أحيانًا السياسات دون التحقق من
auth.uid(). تعتبر السياسات مثلallow select on public.itemsالتي لا تحتوي على جملةusingواسعة النطاق بشكل خطير. يتطلب مطابقة user_id. - DEPLOY — Confirm
FORCE ROW LEVEL SECURITYis live. افتح Supabase Studio، وتحقق من تبديل RLS لكل جدول. إذا كانت عملية ترحيل الملحن تحتوي علىENABLEولكنها نسيتFORCE، فسيتجاوز مالكو الجدول (عمليات الترحيل الخاصة بك) RLS. وهذه فجوة حقيقية. - POST — Run the baas.supabase-rls active check. يحاول الكتابة باستخدام المفتاح المجهول. إذا نجحت، فإن RLS لا يتم فرضه فعليًا - فمن المحتمل أن تفتقد الكلمة الأساسية
FORCE.
المصادقة والجلسات (4 عناصر)
Cursor ينشئ تدفقات المصادقة بسرعة ولكنه غالبًا ما يفتقد التحقق الدقيق من جانب الخادم الذي يحافظ على الرموز المميزة آمنة.
- PRE — Ensure all auth routes use
getUser(). ابحث عنgetSession()في مساراتك API واستبدلها بـawait supabase.auth.getUser().getSession()يقرأ ملف تعريف الارتباط الذي لم يتم التحقق منه؛getUser()يتم التحقق من صحته باستخدام الواجهة الخلفية Supabase. - PRE — Check Composer auth handlers for token expiry. تحتاج الرموز المميزة لـ Magic-link إلى فرضها بواسطة الخادم
expires_at. الافتراضي Supabase هو ساعة واحدة - لا تطلب من Cursor تجاوزه دون سبب حقيقي. - PRE — Audit the sign-in redirect guard. يجب التحقق من صحة إعادة توجيه معلمة الاستعلام
nextبعد تسجيل الدخول: يجب أن تبدأ بـ/، وليس//أبدًا. يتخطى الملحن هذا أحيانًا. أضفه يدويًا إذا كان مفقودًا. - POST — Test logout server-side state destruction. قم بتسجيل الدخول، وتسجيل الخروج، وفحص ملفات تعريف الارتباط (DevTools → Application → Cookies). يجب مسح ملف تعريف ارتباط الجلسة على الفور. إذا استمر الأمر، فإن معالج تسجيل الخروج لا يدمر الحالة.
HTTP رؤوس الأمان وCSP (3 عناصر)
نادرًا ما يقوم Cursor بإنشاء برامج وسيطة بشكل افتراضي. إذا لم تسأل بشكل صريح، فعادةً CSP وHSTS غير موجودين.
- PRE — Demand CSP in
.cursorrules. أضف: "قم بإنشاءsrc/middleware.tsباستخدام Content-Security-Policy. استخدم nonce لـ script-src، لا يوجد سطر غير آمن." ثم اطلب Cursor لإنشائه. بدون هذا التلميح، يتم تخطي البرامج الوسيطة. - PRE — Verify
src/middleware.tsexists. باستخدام تخطيط الدليلsrc/، Next.js يلتقط فقطsrc/middleware.ts. يتم تجاهل مستوى الجذرmiddleware.tsبصمت. إذا لم يتم الوصول إلى CSP، فتأكد من وجود الملف في المكان الصحيح. - POST — Run headers.security-headers. تقارير الفحص السلبي مفقودة CSP، HSTS، خيارات الإطار X، خيارات نوع المحتوى X. افتح التقرير واتبع إرشادات الإصلاح لنظام النشر الأساسي الخاص بك.
نظافة النشر (5 عناصر)
غالبًا ما تصل التطبيقات Cursor إلى Vercel، والتي تحتوي على إعدادات افتراضية جيدة ولكنها تحتاج إلى تقوية واضحة لحدود build/deploy.
- DEPLOY — Check Vercel env-var scoping. الإعدادات → متغيرات البيئة → يجب تحديد نطاق كل سر إلى Proالاستخراج فقط. لا تشارك أبدًا
sk_live_*مع المعاينة أو التطوير. - DEPLOY — Disable build-log secret echo. إذا كان سير عمل الإجراءات
vercel.jsonأو GitHub يحتوي علىecho $SECRET، فقم بإزالته. يتم أرشفة سجلات البناء بشكل علني؛ الأسرار الموجودة في السجلات معرضة للخطر. - DEPLOY — Use Vercel's managed secrets, not inline workflow vars. إعدادات Vercel → يتم تشفير متغيرات البيئة في حالة عدم النشاط. GitHub أسرار الإجراءات أفضل من لا شيء ولكنها مصممة لـ CI، وليس لتكامل النظام الأساسي للنشر.
- POST — Verify CSP nonce on the deployed preview. افتح رابط المعاينة Vercel في المتصفح، وافتح DevTools → الشبكة → استجابة الجذر HTML. يجب أن يكون رأس CSP موجودًا ويتضمن
'strict-dynamic'مع رقم فريد لكل طلب. - POST — Rotate any key that ever shipped, even to Preview. إذا وصل المفتاح إلى حزمة الإنتاج لمدة 10 دقائق، فهذا يعني أنه قد تم اختراقه. تدوير على الفور.
Cursor- مشكلات محددة (4 عناصر)
الأنماط الفريدة لسير عمل Cursor والتي تؤدي إلى مخاطر أمنية:
- Agent mode auto-fixes propagate old patterns. إذا طلبت من Agent "إصلاح أخطاء المصادقة"، فقد يقوم بإعادة إنشاء نفس ملف المصادقة عدة مرات، مع تضمين نفس مفتاح الخدمة في كل مرة إذا كان في سياق قاعدة التعليمات البرمجية. قم بتنظيف النسخة الأصلية أولاً، ثم اطلب من الوكيل إصلاحها.
- تعد فهرسة Cursor Index leaks intent. Cursor
@codebaseقوية ولكن إذا تم كشف دليل.cursorالخاص بك (تم تكوين S3 بشكل خاطئ، سجل git)، فسيكشف الفهرس عن بنيتك وأنماطك السرية. حافظ على.cursorمحليًا. - Composer mode loses context between files. كل ملف ينشئه الملحن يكون جديدًا. إذا طلبت منه إنشاء ملف عميل، ثم مسار API، فقد يستخدم تكوينات عميل Supabase مختلفة. قم بمراجعة كليهما وتأكد من مطابقتهما للهندسة المعمارية الخاصة بك.
- Autocomplete bias toward "working" over "secure". Cursor يقترح أسرع رمز يمرر السياق الحالي لديك. إذا كان اختبارك يحتوي على
NEXT_PUBLIC_SERVICE_KEY، فإن الإكمال التلقائي يتذكره ويعيد اقتراحه. قم بتنظيف تركيبات الاختبار قبل مشاركة الكود مع النموذج.
الخطوات التالية
بمجرد قيامك بتأمين الأنماط المحددة Cursor، قم بمراجعة general vibe coding security checklist (44 عنصرًا) ثم step-by-step hardening. راجع أيضًا Claude Code checklist إذا كنت تقوم بخلط الأدوات.
