الأمان والخصوصية
كيف نحمي حسابك
آخر تحديث: 18 مايو 2026
المنهج: الأمان عند مهارة ليس شعاراً تسويقياً. هذه الصفحة تُلستر التدابير التقنية الفعلية المطبّقة في الكود، لتتمكن من التحقق منها بنفسك إن أردت — أو تبليغنا إن وجدت ثغرة.
تسجيل الدخول وكلمات المرور
- كلمات المرور: تُخزَّن كـ hashes عبر bcrypt بمعامل كلفة 12 — لا نخزّن النص الأصلي مطلقاً.
- الحماية من Brute-force: بعد 5 محاولات فاشلة على نفس البريد، يُقفل الحساب لـ 4 ساعات. القفل مُنفَّذ على مستوى مزوّد المصادقة، لا يمكن تجاوزه بطلبات API مباشرة.
- زمن استجابة ثابت: سواء البريد موجود أم لا، وقت رد محاولة الدخول واحد — لا يمكن التعرّف على البريد المسجّل عبر فروقات زمنية.
- رسالة فشل موحّدة: أي فشل بتسجيل الدخول يطلع نفس الرسالة — لا نُفصِح إن كان البريد غير موجود أو كلمة المرور خاطئة أو الحساب مقفل.
- تحقق البريد إلزامي: لا تعمل كلمة المرور حتى تُفعّل بريدك عبر الرابط المُرسَل.
- الجلسات: JWT موقّعة بـ HS256 (مفتاح AUTH_SECRET 32 بايت). لا تُرسَل المفاتيح للعميل أبداً.
- قريباً: تحقق بخطوتين (2FA) عبر SYROTP — رمز SMS بالعكس مصمَّم محلياً.
البيانات وحفظها
- قاعدة البيانات: Postgres مع امتدادات pgcrypto + citext. لا توجد كلمات مرور خام بأي مكان.
- عناوين IP: تُجزَّأ بـ SHA-256 قبل تخزينها بسجل التدقيق. لا نخزّن أي IP صراحةً.
- أرقام الحسابات: تفاصيل وسائل الدفع (شام كاش، البنك، المحفظة الرقمية) غير مرئية للعميل أبداً — حتى عند دفعه لمقدّم الخدمة. الحماية بطبقتين: فحص ملكية الصف بكل Server Action، وفلترة على مستوى الـ UI.
- وثائق الهوية: تُحذف نهائياً خلال 24 ساعة من اكتمال التحقق. سياسة عدم احتفاظ صريحة.
- الإيميل بسجلات التدقيق: الدومين فقط (gmail.com)، لا البريد الكامل.
- كل حقل PII موسوم في الـ schema بتعليق صريح للمراجعة.
الـ HTTP Headers
كل صفحة تُرسل الـ headers التالية لتعزيز عزل المتصفح:
Strict-Transport-Securityمعpreload— مدة سنتين.Content-Security-Policyصارمة — script-src/style-src/img-src/font-src/connect-src كل منها مقيّد بمصدر محدّد.X-Frame-Options: DENYوframe-ancestors 'none'— مهارة لا يمكن تضمينها في iframe (حماية من clickjacking).X-Content-Type-Options: nosniffReferrer-Policy: strict-origin-when-cross-originPermissions-Policy: camera=(), microphone=(), geolocation=()— لا نطلب صلاحيات حسّاسة من المتصفح.X-Powered-Byمُلغى — لا نكشف stack التشغيل.
الكود وSever Actions
- تحقق الإدخال: كل Server Action يستخدم Zod للتحقق من شكل المدخلات قبل أي عملية DB.
- CSRF: Auth.js يحمي endpoints المصادقة بـ token CSRF تلقائياً. Server Actions في Next.js محميّة ببنيتها (signed action IDs).
- ملكية الصف: كل عملية تعدّل بيانات مستخدم تتحقق إن مالك الصف = الجلسة الحالية. لا تعتمد الحماية على الـ UI فقط.
- صلاحيات الأدمن: مسارات الإدارة محميّة بـ
requireAdmin()الذي يعيد التوجيه للصفحة الرئيسية (لا للـ login، لتجنّب الكشف عن وجود لوحة إدارة). - أمان حماية AI: طلبات المطابقة بالـ AI تمر عبر safety gate يرفض الطلبات غير القانونية / الاحتيالية / الضارة قبل عرض أي مرشّحين.
- SQL Injection: Drizzle ORM يستخدم prepared statements لكل query. لا توجد string concatenation في استعلامات DB.
- سجل التدقيق: كل عملية حسّاسة (login، signup، payout، dispute decision) تُسجَّل في جدول
audit_logsمع ipHash و user agent.
الخصوصية مع طرف ثالث
- OpenRouter (للـ AI): نُرسل وصف المشروع فقط للتحليل. لا نرسل بيانات حساب المستخدم.
- Resend (للإيميل): الإيميل والـ subject فقط. لا محتوى حسّاس بالإيميلات.
- المنصة سوفر سوري (مخطط للإطلاق) — البيانات تبقى ضمن المنطقة العربية.
الإبلاغ عن الثغرات (Responsible Disclosure)
إن وجدت ثغرة أمنية، أبلغنا قبل أي إفصاح علني. نلتزم بـ:
- الرد خلال 72 ساعة
- تحديث منتظم خلال المعالجة
- نشر اعتراف بالباحث بعد إصلاح الثغرة (لو رغب)
- عدم اتخاذ إجراء قانوني ضد الباحث المتعاون بحسن نية
للإبلاغ
راسلنا على support@mahara.sy مع تفاصيل الثغرة، خطوات إعادة إنتاجها، والأثر المحتمل.
مهارة تشغّل برنامج Bug Bounty بمكافآت تصل إلى $200 لكل ثغرة موثّقة فريدة. للشروط والنطاق: صفحة الباحثين الأمنيين.
للتفاصيل التقنية الكاملة وسياسة التواصل، راجع /.well-known/security.txt.
لقرائتك راجع سياسة الخصوصية و الشروط.