// docs / security guides / cursor checklist
Cursor security checklist: 25 items before ship
Building with Cursor? Cursor's autocomplete and Agent features are exceptionally powerful — and create predictable security blind spots. This checklist targets Cursor-specific patterns: service-role key inlining, generated multi-file edits merged without review, Agent-mode terminal commands, and project rules (.cursor/rules) as your first security guardrail. 25 items across secrets, database, auth, headers, deployment, and Cursor-specific gotchas.
PRE = pre-deploy (audit your source). DEPLOY = at deploy time. POST = post-deploy verification.
الأسرار ومفاتيح API (5 عناصر)
يتم تدريب الإكمال التلقائي لـ Cursor على تعليمات برمجية مفتوحة المصدر حيث تكون الأسرار شائعة. يقترحها النموذج بحرية، خاصة بعد محاولة المصادقة الفاشلة.
- PRE — Write security rules into your project rules. Add a rule in
.cursor/rules(Cursor docs): "Never inlineSUPABASE_SERVICE_ROLE_KEY,sk_live_*, or any server secret into client-side code. Always use server-only imports." Cursor applies project rules as context for Agent and chat. - 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 in JavaScript Bundles. الفحص السلبي على URL المنشور. إذا ظهر مفتاح خدمة في الحزمة JS، فقم بتدويره على الفور - ربما يكون الإكمال التلقائي لـ Cursor مضمنًا فيه.
التحكم في الوصول إلى قاعدة البيانات (4 عناصر)
غالبًا ما يقوم الملحن بإنشاء رمز مصادقة صالح ولكنه يتخطى RLS - لحظة "إنه يعمل" تعمي الأشخاص عن تنفيذ السياسة المفقودة.
- PRE — Make Cursor generate migrations with RLS. In your project rules: "Every
CREATE TABLE public.*migration must includeALTER TABLE ... ENABLE ROW LEVEL SECURITYand a policy per command scoped toauth.uid()." Then ask Cursor to generate the migration. - PRE — Review Composer-generated policies. يكتب الملحن أحيانًا السياسات دون التحقق من
auth.uid(). تعتبر السياسات مثلallow select on public.itemsالتي لا تحتوي على جملةusingواسعة النطاق بشكل خطير. يتطلب مطابقة user_id. - DEPLOY — Confirm RLS and policies are live. Open Supabase Studio and check that every table's RLS toggle is on and that each table has policies. A table with RLS on and no policies denies everything; one with
USING (true)allows everyone. - POST — Run a FixVibe scan on the deployed app. Check the Supabase Row-Level Security result: it shows any table an anonymous visitor can read with your public key.
المصادقة والجلسات (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 your project rules. Add: "Generate a
src/middleware.tswith Content-Security-Policy. Use nonce for script-src, no unsafe-inline." Then ask Cursor to generate it. Without this hint, middleware is skipped. - PRE — Verify
src/middleware.tsexists. باستخدام تخطيط الدليلsrc/، Next.js يلتقط فقطsrc/middleware.ts. يتم تجاهل مستوى الجذرmiddleware.tsبصمت. إذا لم يتم الوصول إلى CSP، فتأكد من وجود الملف في المكان الصحيح. - POST — Run HTTP 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 (51 عنصرًا) ثم step-by-step hardening. راجع أيضًا Claude Code checklist إذا كنت تقوم بخلط الأدوات.
