
كاشف تسرّب الخصوصية في المتصفح — ثماني وحدات كشف، وتقييم للمخاطر، وسجل لكل حساب، كل ذلك داخل متصفحك.
كاشف تسرّب خصوصية المتصفح — ثماني وحدات كشف، وتقييم للمخاطر، وسجل لكل حساب، كل ذلك داخل متصفحك.
صُنع باستخدام Verdent — مساعد برمجة وكيلي. كل وحدة كشف، ولوحة التحليلات، وتدفق مصادقة مفاتيح API، والواجهة ثنائية اللغة، وصورة Docker الجاهزة لـ Kubernetes صُمّمت ونُفّذت في جلسات برمجة ثنائية بقيادة Verdent.
افتح رابطًا، وانقر تشغيل الكل، وخلال ثوانٍ يخبرك Leakish بما يسرّبه متصفحك عنك وعن شبكتك — عبر WebRTC، وواجهات البصمة، وDNS، وفحص من جانب الخادم. تُنتج الوحدات الثماني المستقلة كلٌّ منها نتيجةً محددة النوع + إشارات مخاطر، ودرجةً مجمّعة (0–100) ومستوى (safe / warning / critical).
يمكن للمستخدمين المسجّلين حفظ عمليات الفحص في MySQL، وتصفّح السجل، وفتح لوحة تحليلات تعرض مخططات التوزيع، وتكرار تجزئة البصمة، وخطًا زمنيًا لعناوين IP / ASN، وفحوصات شاذة، ومقارنة ثنائية. أما كل ما عدا ذلك (أداة الكشف نفسها) فيعمل بدون حساب — يمكن لأي شخص زيارة /app وتشغيل فحص.
تُسجَّل كل وحدة عبر واجهة واحدة محددة النوع DetectionModule<T> وتعمل بمعزل عن غيرها — تعذّر أي وحدة لا يؤثر على البقية. تُحفظ حالة التمكين لكل وحدة في localStorage مع مفتاح إصدار، وتستمر بعد تحديث الصفحة، وزر تشغيل الكل ينفّذ فقط الوحدات الممكّنة.
/api/detect/network لقراءة عنوان IP الذي رآه الخادم، أو (ج) تتواصل وحدة DNS مع https://dns.google/resolve.leakish.locale، وتتحكم في <html lang>، وبيانات الصفحة الوصفية، وكل شاشة، وكل استجابة خطأ من API، وبريد تسجيل الدخول عبر الرابط السحري.det_… من صفحة التكاملات (يُخزَّن SHA-256، ويُعرض النص الصريح مرة واحدة). يقبل كل مسار /api/detect/* إما ملف تعريف ارتباط للجلسة أو مفتاح Bearer، بحيث يمكن حفظ نفس الفحص من وظيفة CLI / CI./scans/analytics — مخططات توزيع عبر المنطقة الزمنية / المنصة / اللغة / الشاشة / WebGL / ASN / الدولة / عدد الخطوط، وتكرار تجزئة البصمة مع درجة مخاطر لكل نوع، وخط زمني لعناوين IP / ASN، وكاشف شذوذ متعدد المحاور، ومقارنة ثنائية بدرجة تشابه 0–100.lib/risk/assess.ts إشارات RiskSignal محددة النوع بمعرّفات ثابتة (مثل )، وملخصات لكل وحدة، ودرجة إجمالية واحدة. ويراعي اللغة عبر حقن .المتطلبات: Node 22+ (أي إصدار 20+ يكفي للتطوير المحلي)، وYarn 1.x، وخادم MySQL قيد التشغيل، و(اختياريًا) عميل Google OAuth.
yarn install
cp env.example .env.local # fill in DATABASE_URL, NEXTAUTH_SECRET, IP_HASH_SALT at minimum
yarn prisma:generate
yarn db:push # provision tables on a fresh DB
yarn dev # http://localhost:3000
الحد الأدنى من متغيرات البيئة لتسجيل دخول يعمل:
DATABASE_URL — مثل mysql://root:[email protected]:3306/detectNEXTAUTH_SECRET — openssl rand -base64 32NEXTAUTH_URL — http://localhost:3000 في بيئة التطويرIP_HASH_SALT — openssl rand -base64 32اختياري:
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET لتسجيل الدخول عبر GoogleMAILGUN_API_KEY / MAILGUN_DOMAIN / EMAIL_FROM لتسليم الرابط السحري الفعلي (بدون هذه يُطبع الرابط في وحدة تحكم خادم التطوير)IPINFO_TOKEN لإثراء فحص الشبكة ببيانات ASN / VPN / الوكيلانظر env.example للحصول على القائمة الكاملة المشروحة.
app/
├── (marketing)/ # / — Landing (server-resolved auth state + client UI)
├── app/ # /app — the detector page
├── login/ # /login
├── scans/ # /scans, /scans/[id], /scans/analytics
├── integrations/ # /integrations — API key management
├── api/
│ ├── auth/ # NextAuth route + apiKey-login + tests
│ ├── detect/
│ │ ├── analytics/ # aggregate + pairwise-diff
│ │ ├── network/ # server-side egress probe
│ │ ├── scans/ # save / list / get / delete
│ │ └── uniqueness/ # how many users share this fingerprint hash
│ ├── integration/keys # create / revoke / list API keys
│ └── health/ # liveness probe for k8s
├── opengraph-image.tsx # dynamic OG (per-locale)
├── apple-icon.tsx # dynamic apple-touch icon
├── icon.svg # shield gradient
└── layout.tsx # metadata + theme-init script + LocaleProvider
components/
├── modular-detector.tsx # top-level shell (header + module list + result/overview)
├── detector/ # module-list, result-panel, category filter, state hook
├── result-details/ # one detail view per module (typed switch)
├── overview/ # overview panel + diagnostics export
├── auth/ # AuthGateProvider, login dialog, login form
├── providers/ # SessionProvider wrapper
└── ui/ # shadcn-style primitives + theme/locale toggles
lib/
├── detection-modules/ # 8 module impls + ModuleManager + IP utils + tests
├── risk/ # assess.ts — RiskSignal/score aggregation
├── i18n/ # en.ts / zh.ts + Messages type + locale client/server
├── api/ # withDetectAuth wrapper, scan-payload Zod schema
├── client/ # browser-side scan-api (extractFingerprintInputs, saveScan, lookupUniqueness)
├── server/ # network-probe, IP-hash salt, fingerprint hashing, rate-limit, send-email, analytics
├── persistence/ # SSR-safe localStorage wrappers
├── env.ts # runtime env validation
├── logger.ts # dev-only diagnostic logger
└── prisma.ts # singleton client targeted at .prisma/detect-client
prisma/schema.prisma # User / Account / Session / DetectScan / ApiKey / DetectFingerprintHash
/app. تمر أداة الكشف على الوحدات الممكّنة عبر ModuleManager.runAllEnabledModules — يُلتقط خطأ كل وحدة ويعزل بحيث تظهر نتائج الوحدات الأخرى.DetectionResult<T> محددة النوع (مع وسم success | failure وdata خاصة بالوحدة). تعرض لوحة النتائج مكوّن تفاصيل لكل وحدة عبر switch آمن النوع.lib/risk/assess.ts على كل نتيجة، ويصدر إشارات RiskSignal بمعرّفات ثابتة، وينتج OverallAssessment (درجة + مستوى + تعدادات).POST إلى /api/detect/scans. يتحقق الخادم باستخدام Zod، ويشغّل فحص الشبكة الخاص به لتسجيل IP / ASN / علامات VPN التي رآها الخادم، ويكتب صف DetectScan بالإضافة إلى صفوف .تعيش اختبارات الوحدات بجانب ما تختبره داخل مجلدات __tests__/:
yarn test # full suite
yarn test path/to/file # single file
yarn test -t "name pattern" # by test-name regex
أبرز ما فيها:
lib/detection-modules/__tests__/ — تصنيف IP + استخراج mDNS، وتسجيل مدير الوحدات وعزل الأخطاء، وRTCPeerConnection مُحاكى لوحدة WebRTC، واختبارات شكل jsdom لوحدة بصمة المتصفح، وتوليد إشارات CDP/الأتمتة.lib/server/__tests__/analytics.test.ts — تقسيم التوزيع إلى مجموعات، وتجميع التكرارات، وتقييم الشذوذ، وحسابات التشابه الثنائية.app/api/detect/scans/__tests__ — حفظ POST (التحقق، حد المعدل، عدم التكرار، التقليم) + قائمة GET + حذف DELETE لفحص واحد.app/api/integration/keys/__tests__ — إنشاء / إبطال / قائمة مع تقييد الوضع (جلسات مفاتيح API لا يمكنها إنشاء مفاتيح API أخرى).app/api/auth/__tests__ — مسار تسجيل الدخول عبر مفتاح API (CSRF، فحص الصيغة، معالجة المُبطَل / منتهي الصلاحية، تحديث آخر استخدام).الفحص اللغوي + التحقق من الأنواع:
yarn lint
npx tsc --noEmit
يُنتج Dockerfile المرفق صورة Next.js مستقلة على node:22-alpine. تُحقن متغيرات بيئة الإنتاج عبر Kubernetes Secret — تُدمج القيم المكانية (placeholder) في وقت البناء بحيث لا تكون SKIP_ENV_VALIDATION مطلوبة وقت التشغيل. تعمل وظيفة prisma db push على تطبيق المخطط قبل الإصدار. انظر .github/workflows/deploy-tke.yml للاطلاع على خط الأنابيب الكامل لبناء الصورة ← الترحيل ← الإصدار.
لا يحتوي هذا الإصدار مفتوح المصدر على أي جدار دفع. تخضع عمليات الحفظ فقط لمحدد المعدل داخل العملية لكل مستخدم في lib/server/rate-limit.ts (10 عمليات حفظ/ساعة)، والاحتفاظ بالسجل غير محدود.
انظر LICENSE.
| ID | الوحدة | ما يفحصه |
|---|
network-probe | فحص الخروج من الشبكة | عنوان IP العام الملاحَظ من الخادم، وASN، والدولة/المنطقة/المدينة، وعلامات VPN/وكيل/Tor/استضافة، وTLS/HTTP |
webrtc | WebRTC | IPv4 + IPv6 عام عبر STUN، تسريبات RFC1918، مرشّحات .local المموّهة عبر mDNS |
browser-fingerprint | بصمة المتصفح | UA، الشاشة، المنطقة الزمنية، الإضافات، أنوية المعالج، ذاكرة الجهاز، قائمة اللغات، DNT، ملفات تعريف الارتباط |
canvas-fingerprint | Canvas / WebGL | سلاسل العرض/المورّد لـ 2D + WebGL، وخصائص عرض النص غير المعتادة، وصيغ الصور المدعومة |
audio-fingerprint | الصوت | معدل عيّنات AudioContext، والقنوات، وزمن الوصول، وتجزئة مخرجات المذبذب |
font-detection | الخطوط | أكثر من 40 فحصًا للخطوط المسماة عبر كشف فرق العرض في Canvas |
dns | DNS | إمكانية الوصول إلى DoH، وإشارة DNSSEC، والموقع الجغرافي للمحلّل، وحدسيات تسريب DNS |
cdp-detection | الأتمتة / بدون واجهة | navigator.webdriver، وتوقيت CDP، وسطح API الخاص بـ Chromium فقط، وفحوصات المنافذ — درجة الثقة 0–1 |
webrtc.public-ip-leakMessagesPOST /api/detect/scans ترويسة Idempotency-Key، ويحدّ أقصى عدد فحوصات لكل مستخدم بـ 200، ويحدّ معدل الحفظ بـ 10/ساعة.node:22-alpine، ومخرجات Next.js المستقلة، وتُنشر إلى Kubernetes عبر سير العمل في .github/workflows/.| المسار | الغرض |
|---|
/ | صفحة هبوط تسويقية (واجهة أورورا، بطاقات المزايا، الأسئلة الشائعة، دعوة لاتخاذ إجراء) |
/app | أداة الكشف — قائمة الوحدات + لوحة النتائج + نظرة عامة |
/login | صفحة تسجيل دخول مستقلة (Google / البريد / مفتاح API) |
/scans | سجل الفحوصات المحفوظة للمستخدم المسجّل |
/scans/[id] | تفاصيل فحص محفوظ واحد |
/scans/analytics | التوزيع / التكرار / الخط الزمني / الشذوذ / المقارنة |
/integrations | إدارة مفاتيح API بصيغة det_… (إنشاء / إبطال / طريقة الاستخدام) |
DetectFingerprintHash/scans/[id]، ويساهم في مجاميع التحليلات، ويُحتسب في بحث التفرّد.| الطبقة | المكوّنات |
|---|
| الإطار | Next.js 14 (App Router، force-dynamic في كل مكان)، React 18 |
| اللغة | TypeScript 5، الوضع الصارم |
| الواجهة | Tailwind CSS 3، مكونات shadcn/ui الأولية على Radix، أيقونات Lucide، Framer Motion |
| المصادقة | NextAuth 4 (Google OAuth + بريد رابط سحري) + محوّل Prisma |
| البيانات | Prisma 6 ← MySQL (مخرج عميل مخصص في .prisma/detect-client) |
| التحقق | Zod |
| الاختبارات | Jest 29 + ts-jest + jsdom |
| البناء / النشر | Dockerfile متعدد المراحل، Next.js مستقلة، ملفات Kubernetes |