البدء
ثبّت Fendix وشغّل أول فحص في ثلاثة أوامر. تغطي الصفحة التثبيت عبر curl وHomebrew وDocker والبناء من مستودع المصدر الرسمي، ثم فحوصات الصندوق الأسود والأبيض والمختلط، والأهداف التي تتطلّب مصادقة، وبوّابة CI/CD، وخطوط الأساس، وواجهة API المستضافة.
نطاق التنفيذ الحالي
- بيئة التشغيل
- لا تتطلب ملفات Go التنفيذية الجاهزة مترجم Go للفحص الأساسي. يتطلب البناء من المصدر Go 1.25+. لمحركات الفحص الاختيارية متطلبات تشغيل خاصة؛ راجع التغطية للتأكد من تنفيذها.
- DAST
- يفحص تحليل الروابط وواجهات API السلوك الظاهر أثناء التشغيل. تتطلب الاختبارات النشطة --enable-active. لا تثبت استجابة HTTP 200 وحدها الوصول إلى بيانات حساسة.
- SAST
- تغطي القواعد الساكنة الأصلية أنماطًا مدعومة في Go وJavaScript وJava والبنية التحتية. يوسع Semgrep ومحرك Python الاختياري الفحوصات المناسبة. دعم اللغة لا يعني تغطية جميع الأطر أو المسارات.
- SCA
- يستخدم تحليل Go أداة govulncheck. تستخدم محركات تبعيات Python وnpm ملفات التعريف والتثبيت المدعومة، ومنها poetry.lock وPipfile.lock وpackage-lock.json. قد تنقل استعلامات الثغرات أسماء الحزم وإصداراتها.
- الأدلة والسياسة
- يربط الترابط المشاهدات المتطابقة المدعومة؛ ليست لكل نتيجة مصادر متعددة. قد تكفي أدلة قوية من مصدر واحد. الشدة والثقة وحالة النتيجة وتوصية الإصدار مفاهيم منفصلة.
- التغطية والمراجعة البشرية
- قد يترك فشل محرك أو غياب أدلة مطلوبة الإصدار غير مكتمل. تعني PASS نتيجة وفق السياسة والتغطية المحددتين وليست ضمانًا للأمان أو موافقة بشرية.
جداول القياس أدناه ملاحظات تاريخية محددة النطاق. أعداد النتائج ودرجات الاختبارات الاصطناعية ليست مقاييس الدقة والاستدعاء في الإنتاج. لا ندعي وجود قياسات بديلة هنا.
اقرأ معالجة البيانات حسب طريقة النشربداية سريعة
ثلاثة أوامر للانتقال من الصفر إلى تقرير أمان HTML كامل.
# 1. Install
curl -fsSL https://get.fendix.dev/install.sh | sh
# 2. Run your first scan
fendix scan --url https://api.example.com --format html --output report.html
# 3. Open the report
open report.htmlيفحص Fendix واجهة API بحثًا عن رؤوس الأمان المفقودة، وإعدادات CORS الخاطئة، وأعلام ملفات تعريف الارتباط غير الآمنة، وتجاوزات المصادقة، وكشف البيانات الحساسة، ومشكلات تحديد المعدل — كل ذلك دون إرسال أي حمولات تدميرية.
التثبيت
curl (macOS / Linux)
يقوم بتنزيل أحدث ملف تنفيذي للإصدار إلى /usr/local/bin/fendix.
curl -fsSL https://get.fendix.dev/install.sh | shHomebrew (macOS / Linux)
ثبّت Fendix من مستودع Fendix-app/homebrew-fendix الرسمي. اسم الـ tap هو Fendix-app/fendix لأن Homebrew يحذف بادئة homebrew- من اسم المستودع.
brew tap Fendix-app/fendix
brew install fendixDocker
تعمل صورة Docker جاهزة للاستخدام مباشرة — تعمل فحوصات الأسرار وSemgrep (إن وُجد) وفحوصات dep-CVE جميعها أصليًا في Go. أما محرك الصندوق الأبيض المكتوب بلغة Python فهو اختياري عبر --python-engine إذا أردت أيضًا فحوصات المصادقة / الحقن / AST.
docker pull fendixapp/fendix:3.4.1
docker run --rm fendixapp/fendix:3.4.1 version
docker run --rm fendixapp/fendix:3.4.1 scan --url https://api.example.comالتحقق من الصورة
تحقّق من الصورة المثبّتة بالبصمة مقابل هوية GitHub Actions الرسمية لـ Fendix قبل استخدامها في خط إنتاج موثوق.
IMAGE=docker.io/fendixapp/fendix
DIGEST=sha256:88783a1a032f925630bdb0977b37821add5e3381d347f91ec101401f4e98e02a
REF="$IMAGE@$DIGEST"
IDENTITY='^https://github.com/Fendix-app/Fendix/.github/workflows/release.yml@refs/heads/main$'
ISSUER='https://token.actions.githubusercontent.com'
cosign verify \
--certificate-identity-regexp "$IDENTITY" \
--certificate-oidc-issuer "$ISSUER" \
"$REF"البناء من المصدر
يتطلب Go 1.25+. لم تعد Python مطلوبة لمسار الفحص الافتراضي اعتبارًا من الإصدار v0.9 — فهي مطلوبة فقط إذا اخترت محرك الصندوق الأبيض المكتوب بلغة Python عبر --python-engine، وفي هذه الحالة ثبّت Python 3.9+ والاعتماديات الموجودة في python/requirements.txt.
git clone https://github.com/Fendix-app/Fendix.git
cd Fendix
make build
./bin/fendix version
# Default scan path needs no Python — secrets, semgrep (if installed),
# and dep-CVE checks all run as native Go. For the
# opt-in --python-engine path (auth / injection / AST checks), install
# Python deps:
# pip install -r python/requirements.txtالإصدار الحالي: v3.4.1. تُبنى صور المحرك الآن بلغة Go 1.27 وتشحن بها، فيُحمّل govulncheck أي وحدة يتطلب ملف go.mod الخاص بها الإصدار Go 1.27 أو أقدم — وكان السقف السابق 1.25. لا تغييرات في الفاحصات أو البصمات أو رموز الخروج، ويبقى الحد الأدنى لإصدار وحدات Go عند 1.25. v3.4.0: لم يعد بالإمكان أن يبدو المسح مكتملًا وهو ليس كذلك. صار كل محلل قد يتعطل بصمت — اكتشاف نقاط النهاية، ومحلل المواصفة، والمسابير النشطة، والأسرار، وtextscan، وsemgrep، وgovulncheck، وpip، وnpm، ومحرك Python وفحوصه، والإضافات — يسجّل مرة في كل مسح ما إذا كان قد عمل، وإن لم يعمل فسببًا قابلًا للقراءة آليًا: غير قابل للتطبيق، أو معطَّل براية، أو اعتمادية مفقودة، أو هدف غير مدعوم، أو فشل مع سببه. وتقول كتلة metadata.coverage الجديدة في التقرير ما إذا كان كل ما أُعدّ المسح لتنفيذه قد نُفّذ فعلًا وتسمّي الفجوات. وصار مسح عنوان URL الذي لا يجد أي نقطة نهاية يكتب تقريره قبل الخروج بالرمز 2 بدل أن يختفي؛ وتحوّل --fail-on-coverage-gap و--require-analyzers الفجوة إلى بناء مُخفق، وهما معطّلتان افتراضيًا؛ ويُعاد فشل الشبكة العابر في فاحص الاعتماديات مرة واحدة داخل العملية؛ وتعرض تقارير SARIF وHTML وPDF جدول التغطية؛ وتشحن صورة Docker الآن أدوات Go كي يعمل govulncheck داخلها. أما هوية النتائج والتقييم ورموز الخروج الافتراضية فلم تتغير. v3.3.0: لم تعد الترقية تقسم النتيجة التي تتابعها إلى نتيجة مغلقة وأخرى جديدة: صارت التقارير تحمل الهوية القديمة إلى جانب الحالية، لغرض واحد هو الجَسر بين الاثنتين لكل نظام يتابع النتائج عبر تغيير الهوية في v3.0. لا شيء يعتمد عليها في التقييم أو التصفية، والهوية الحالية لم تتغير، فتبقى الأسس المحفوظة وقواعد fingerprint: في .fendix-ignore مطابقة كما هي. كذلك صارت قائمة الفحوص التي أجراها المسح صادقة — تُبنى مما اكتمل فعلًا لا مما جرى إعداده، فلم يعد الفاحص غير المتاح يُذكر كأنه عمل. وفي v3.2.0 صار كل قرار حظر يشرح نفسه: صار كل قرار حظر يشرح نفسه داخل التقرير. تحمل النتيجة القرار، والسياسة التي اتُّخذ بموجبها، وصنف الدليل الذي برّره، وتفصيلًا قاعدةً بقاعدة لدرجة الثقة — ويقول تقريرا JSON وSARIF الشيء نفسه، فيصير سؤال «لماذا أخفق خط الإنتاج لديّ؟» قابلًا للإجابة دون فتح Fendix. وأي بناء حُظر لمجرد أن فرض الثقة كان مُعطَّلًا يُوسم بذلك صراحةً، ولا تُوسم النتائج غير الحاظرة كأنها حظرت. وأوقف الإصدار v3.1.0 ادعاء النتائج بأكثر مما أثبتته: صار CORS بحرف بدل مع بيانات الاعتماد خطأ تهيئة لا ثغرة مُستغَلّة ولم يعد يُفشل البناء، ويُرتَّب غياب تحديد المعدّل بحسب قابلية العملية لإساءة الاستخدام، وتُقيَّم ترويسات أمان المتصفح بحسب نوع الاستجابة التي وردت عليها، ولا يُبلَّغ عن المسار الديناميكي بوصفه اجتيازًا مُثبَتًا، وتتوقف بيانات الاختبار الواضحة عن أن تُعامَل تسريبًا، ولم يعد الاستيراد غير المحلول دليلًا على أن الاعتمادية غير مستخدمة. ويوفّر المحرك محرك SAST موحدًا للمسح النصي يدعم Go/JS/IaC/Java، وتقارير قرار (BLOCK / WARN / INFO مع نطاق ثقة حتمي)، وتقارير PDF وصفحات HTML بالعربية، وتكاملات Jira / Slack / Teams، وفحوصات واعية بالفروق تعمل عند كل التزام (fendix scan --code . --diff --staged --fast)، وبوابة ما قبل الالتزام fendix hook install، وسلاسل تتبّع Proven Path المُصدَّرة كـ codeFlows بصيغة SARIF، وتحليل SCA متعدٍّ للاعتماديات في Python عبر poetry.lock / Pipfile.lock. وغيّر الإصدار v3.0 هوية النتيجة: صارت الهوية مبنية على القاعدة والملف والرمز والعملية بدل ارتباطها جزئيًا بالسطر، فتصمد أمام التعديلات فوقها — لكن خط الأساس المحفوظ بإصدار أقدم لا يطابق شيئًا ويجب إعادة توليده بـ --save-baseline، ومعه أي قاعدة .fendix-ignore تثبّت قيمة fingerprint:. وما يزال سلوك v2.0 في خطوط CI ساريًا: تستشير --fail-on نطاق الثقة الحتمي لا الخطورة وحدها — وتعيد --enforce-confidence=false التعيين السابق كما كان بالضبط. على مجموعة الدقة الاصطناعية المُصنَّفة، يحقق fendix F1 = 1.000 عبر جميع فئات الكشف. راجع /performance للاطلاع على معيار البدء البارد و/accuracy للاطلاع على بطاقة درجات الدقة/الاستدعاء.
أمثلة الاستخدام
فحص الصندوق الأسود
وجّه Fendix إلى واجهة API حية. لا حاجة إلى الشيفرة المصدرية. يشغّل جميع الفحوصات السلبية.
fendix scan --url https://api.example.comفحص الصندوق الأبيض
حلّل الشيفرة المصدرية دون إجراء أي طلبات شبكية. يشغّل المسار الافتراضي v0.9 ماسح الأسرار الأصلي في Go، وماسحات dep-CVE (لـ Go عبر govulncheck، ولـ PyPI/npm عبر OSV.dev)، ويستدعي Semgrep إن كان ضمن PATH. أما تحليل AST (أنماط المصادقة/الحقن) وفحوصات المصادقة المشتقة من المواصفات فتوجد في محرك Python — اختر تفعيلها عبر --python-engine عند الحاجة إليها. ويغذّي --spec دائمًا اكتشاف نقاط النهاية، حتى بدون --python-engine.
# Default — runs Go-native scanners
fendix scan --code ./src
# Add --spec for endpoint-discovery from an OpenAPI doc
fendix scan --code ./src --spec openapi.yaml
# Opt into the Python engine for AST + spec-derived auth checks
fendix scan --code ./src --spec openapi.yaml --python-engineالفحص الهجين (أقصى تغطية)
الصندوق الأسود بالإضافة إلى الصندوق الأبيض، مع قيام المُرابِط بالإحالة المتبادلة بين الجانبين. تحصل النتائج المُرابَطة على خطورة مرتفعة، وتحصل النتائج المُرابَطة المُثبَتة القابلية للوصول على رفع ثانٍ ("الإسفين" — اتفق DAST + SAST ويمكننا إثبات مسار الاستغلال). تنتج ماسحات الصندوق الأبيض الأصلية في Go نتائج source: whitebox بمفردها؛ ويعمل الترابط في المسار الافتراضي. أضف --python-engine لفحوصات AST + المصادقة المشتقة من المواصفات القديمة.
fendix scan \
--url https://api.example.com \
--code ./src \
--spec openapi.yaml \
--format html \
--output report.html
# Add --python-engine if you want the legacy AST/spec auth checks
# alongside the native Go secrets + Semgrep + dep-CVE pipeline.الفحص المُصادَق عليه
قدّم بيانات الاعتماد لاختبار نقاط النهاية الموجودة خلف المصادقة. تُخفى بيانات اعتماد المصادقة دائمًا على هيئة [REDACTED] في المخرجات.
# Bearer token
fendix scan --url https://api.example.com --auth "Bearer eyJhbG..."
# API key with custom header
fendix scan --url https://api.example.com \
--auth "sk-live-abc123" \
--auth-type apikey \
--auth-header "X-API-Key"
# Basic auth
fendix scan --url https://api.example.com \
--auth "admin:password" \
--auth-type basicاختبار الحقن النشط (اختياري)
يختبر الحقن (SQL/الأوامر)، وثغرات XSS المنعكسة، وثغرات SSRF داخل النطاق، وإعادة التوجيه المفتوحة، وحقن رأس المضيف، واستكشاف GraphQL، والتلاعب بطرق HTTP. مُعطّل افتراضيًا — يتطلب موافقة صريحة.
fendix scan --url https://api.example.com --enable-activeاستخدمه فقط ضد الأنظمة التي تملكها أو لديك تفويض مكتوب باختبارها.
بوابة CI/CD
أوقف خط الأنابيب عند النتائج الحرجة أو العالية التي يمكن للفحص أن يقف خلفها. ومنذ الإصدار v2.0 يتطلّب رمز الخروج 1 شرطين معًا: نتيجة عند عتبتك أو أعلى منها، ونطاق ثقة يدعمها — لذا تُحذّر النتيجة غير المعزَّزة بدل أن تكسر البناء.
fendix scan \
--url https://api.staging.example.com \
--code ./src \
--fail-on HIGH \
--format sarif \
--output results.sarif
# As of v2.0, --fail-on consults the confidence band as well as severity:
# a HIGH band blocks, MEDIUM blocks only with at least one corroborating
# signal, LOW warns. Builds that used to fail may now pass.
# --enforce-confidence=false restores the severity-only gate; a real
# credential in production code reaches HIGH on its own and still blocks.وضع فروق خط الأساس
أبلِغ فقط عن النتائج الجديدة مقارنةً بفحص سابق. مثالي لسير عمل طلبات السحب (PR).
# Save a baseline
fendix scan --url https://api.example.com --save-baseline baseline.json
# Later, compare against it
fendix scan --url https://api.example.com --baseline baseline.json
# v2.0 names a dependency finding after its canonical CVE, so a baseline
# entry or a .fendix-ignore fingerprint: rule that pins one stops matching.
# Regenerate baselines saved before 2.0.الإعداد
.fendix-ignore
اكبت النتائج المعروفة أو استثنِ نقاط النهاية من الفحص. ضعه باسم .fendix-ignore في جذر مشروعك أو مرّره عبر --ignore.
# Suppress by finding ID
ignore:
- id: SEC-014
reason: "Rate limiting handled at API gateway level"
until: 2026-12-01 # optional expiry date
# Suppress entire endpoint
- endpoint: GET /health
reason: "Public health check endpoint by design"
# Suppress by category on specific endpoints
- endpoint: GET /api/public/*
category: auth
reason: "Public endpoints intentionally unauthenticated"إعادة إنشاء تقرير
حوّل ملف نتائج JSON محفوظًا إلى HTML أو SARIF دون إعادة الفحص.
fendix report --input findings.json --format html --output report.htmlالفحص من واجهة SaaS ولوحة التحكم
إلى جانب واجهة الأوامر، تتيح واجهة Fendix SaaS بدء الفحوصات برمجيًا وتجميعها في لوحة تحكم. صادِق باستخدام X-API-Key (خطة Pro فما فوق). راجع التكامل للحصول على وصفات جاهزة لخطوط الـ CI.
# Launch a scan via the API — X-API-Key (fx_ prefix, Pro plan and up)
curl -X POST https://api.fendix.dev/api/scans \
-H "X-API-Key: $FENDIX_API_KEY" \
-H 'Content-Type: application/json' \
-d '{ "mode": "blackbox", "url": "https://api.example.com", "fail_on": "high" }'
# Workspace overview: totals, severity + category breakdowns, 8-week trend
curl "https://api.fendix.dev/api/dashboard?organization=$ORG_ID" \
-H "X-API-Key: $FENDIX_API_KEY"المشغّلات ذاتية الاستضافة
المشغّل هو وكيل تستضيفه داخل شبكتك: يلتقط المهام المُدرجة، ويُشغّل المحرّك على الأهداف الخاصة أو الداخلية، ويُرسل التقرير إلى لوحة التحكم. يتطلّب ميزة self_hosted_runners في خطة Enterprise.
# Self-hosted runner (Enterprise): scan private/internal targets in-network
# and push results to the dashboard. Register once (org admin) → fxr_ token.
curl -X POST https://api.fendix.dev/api/runners/claim -H "X-Runner-Token: $TOKEN"
fendix scan --code /repo --format json --output report.json
curl -X POST "https://api.fendix.dev/api/runners/jobs/$SCAN_ID/result" \
-H "X-Runner-Token: $TOKEN" -H 'Content-Type: application/json' \
--data-binary @report.jsonاستخدام مسارات لوحة التحكم
افتح الفحوصات واختر فحصًا، ثم استخدم تقارير الذكاء الاصطناعي لإنشاء ملخص أو خطة معالجة أو إرشادات إصلاح. تتطلب الميزة خطة Pro أو أعلى ورصيد مساحة العمل. لا تغيّر المساعدة قرار الفحص. عند تأخر الإنشاء، اختر التحقق من الحالة دون إنشاء تقرير آخر.
في الإعدادات ← التكاملات، اختر تعديل / عمليات التسليم على الخطاف. عدّل الاسم والأحداث والتنسيق، وراجع آخر 50 عملية تسليم واستجابات HTTP والأخطاء. يضع الاختبار الحدث في قائمة الانتظار، ويؤكد سجل التسليم النتيجة.
في موافقات الإصدار، ابحث عن الفحص لطلب استثناء. شارك رابط الطلب مع مراجع مخوّل. يختار الرابط مساحة عمل المؤسسة، وتبقى صلاحيات العضوية والمراجعة مطلوبة.