التكامل مع مسار العمل لديك
تحكّم في الإصدارات حسب عتبة الخطورة، وصدّر مخرجات SARIF/JSON/HTML، وحافظ على اتساق الفحوص الأمنية في الـ CI.
نطاق التنفيذ الحالي
- بيئة التشغيل
- لا تتطلب ملفات 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 نتيجة وفق السياسة والتغطية المحددتين وليست ضمانًا للأمان أو موافقة بشرية.
جداول القياس أدناه ملاحظات تاريخية محددة النطاق. أعداد النتائج ودرجات الاختبارات الاصطناعية ليست مقاييس الدقة والاستدعاء في الإنتاج. لا ندعي وجود قياسات بديلة هنا.
اقرأ معالجة البيانات حسب طريقة النشرمعرّفات قواعد SARIF (محرك الإصدار v0.2+) تأخذ الشكل fendix.<category>.<title-slug>. يجب إعادة توليد خطوط الأساس أو الاستثناءات في المسار المرتبطة بمعرّفات القواعد القديمة لكل حالة وفق صيغة SARIF الجديدة. ويغيّر الإصدار v3.0 هوية النتيجة مجددًا: أعد حفظ أي خط أساس، وأعد كتابة أي قاعدة .fendix-ignore تثبّت قيمة fingerprint:، وتوقّع إعادة أرشفة تنبيهات GitHub مرة واحدة تحت أسماء قواعدها الجديدة. أما القواعد التي تطابق بالمسار أو الفئة أو معرّف القاعدة فلا تتأثر.
v0.5+: تدفّق عمل جاهز لـ GitHub Actions, v0.14+: قوالب أصلية لـ GitLab CI وCircleCI, v0.16+: خطّاف ما قبل الالتزام (fendix hook install) وفحوص مدركة للفروق عند كل التزام
يوجد تدفّق عمل مرجعي كامل لـ GitHub Actions في examples/github-actions/fendix-scan.yml — فحص + خط أساس مُخزَّن مؤقتًا + رفع SARIF + تعليق ملخص على الـ PR + بوابة --fail-on HIGH. ضعه في .github/workflows/ ليعمل على كل PR. ولـ GitLab CI وCircleCI، شغّل fendix init --ci gitlab أو fendix init --ci circleci لتوليد ملف إعداد أصلي.
جديد في v0.7: تطبيق GitHub (فحوص PR دون إعداد)
تجاوز ملفات YAML لتدفّق العمل تمامًا. ثبّت تطبيق Fendix على GitHub في المستودع، وكل pull_request يُفتح أو يُزامَن أو يُعاد فتحه يُطلق فحصًا هجينًا تلقائيًا — استنساخ لـ head SHA فقط (دون السجل)، ثم fendix scan، يليه تعليق Markdown على الـ PR ورفع SARIF إلى تبويب Code Scanning. الإعداد: docs/github-app.md يغطّي تسجيل التطبيق عبر app/manifest.yml والاستضافة الذاتية لـ fendix-app عبر Dockerfile.app (صورة عديمة الحالة بحجم ~250 ميبي بايت، تعمل على Fly.io / Cloud Run / Render / Railway / ECS / k8s دون تغيير).
GitHub Actions
- name: Run Fendix scan
run: |
fendix scan \
--url ${{ secrets.API_URL }} \
--format sarif \
--fail-on HIGH \
--baseline ./baseline.json \
--save-baseline ./baseline.json \
--output fendix.sarif
- name: Upload SARIF
if: always()
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: fendix.sarifGitLab CI
# Generate a native GitLab CI template (saves as .gitlab-ci.yml)
fendix init --ci gitlab
# The generated job (or paste manually):
fendix_scan:
image: fendixapp/fendix:3.4.1
script:
- fendix scan
--url "$API_URL"
--format json
--fail-on HIGH
--baseline ./baseline.json
--save-baseline ./baseline.json
--output fendix.json
artifacts:
paths: [fendix.json, baseline.json]CircleCI
# Generate a native CircleCI config (saves as .circleci/config.yml)
fendix init --ci circleci
# The generated orb step (or paste manually):
version: 2.1
jobs:
security-scan:
docker:
- image: fendixapp/fendix:3.4.1
steps:
- checkout
- run:
name: Fendix scan
command: |
fendix scan \
--url "$API_URL" \
--code ./src \
--format sarif \
--fail-on HIGH \
--output fendix.sarif
- store_artifacts:
path: fendix.sarifJenkins
sh '''
fendix scan \
--url $API_URL \
--code ./src \
--format html \
--fail-on HIGH \
--save-baseline ./baseline.json \
--output fendix.html
'''Docker Compose
services:
fendix:
image: fendixapp/fendix:3.4.1
command: >
scan --url http://api:8080
--code /workspace/src
--format json --fail-on HIGH
--save-baseline /workspace/baseline.json
--output /workspace/results.json
volumes:
- .:/workspaceمزامنة Jira (v0.13.1+)
# Idempotent: creates issues on first run, updates on re-run, skips already-filed
fendix jira \
--findings fendix.json \
--project SEC \
--server https://your-org.atlassian.net
# Environment variables (recommended over flags):
# FENDIX_JIRA_TOKEN=<personal-access-token>
# FENDIX_JIRA_USER=you@example.com
# FENDIX_JIRA_SERVER=https://your-org.atlassian.net
# FENDIX_JIRA_PROJECT=SECتنبيهات Slack + Teams (v0.13.1+)
# Slack webhook
fendix notify \
--findings fendix.json \
--slack-webhook "$SLACK_WEBHOOK_URL"
# Microsoft Teams webhook
fendix notify \
--findings fendix.json \
--teams-webhook "$TEAMS_WEBHOOK_URL"
# Both at once, only notify on HIGH+
fendix notify \
--findings fendix.json \
--slack-webhook "$SLACK_WEBHOOK_URL" \
--teams-webhook "$TEAMS_WEBHOOK_URL" \
--min-severity HIGHواجهة SaaS ولوحة التحكم
إلى جانب مقتطفات CI، تتيح لك واجهة Fendix SaaS بدء الفحوصات برمجيًا، وقراءة لوحة تحكم مجمّعة، و— مع مشغّل ذاتي الاستضافة — دفع فحوصات الأهداف الخاصة أو الداخلية مباشرةً إلى مساحة عملك. صادِق باستخدام X-API-Key (بادئة fx_، خطة Pro فما فوق).
المشغّلات ذاتية الاستضافة تصل إلى ما لا تصل إليه السحابة.
المشغّل هو وكيل تستضيفه داخل شبكتك. يلتقط المهام المُدرجة، ويُشغّل المحرّك على الأهداف الخاصة، ويُرسل تقرير JSON إلى لوحة التحكم — فتظهر واجهات API الداخلية وفحوصات الشيفرة جنبًا إلى جنب مع بقية النتائج. يتطلّب ميزة self_hosted_runners في خطة Enterprise.
واجهة SaaS — بدء فحص
# Launch a scan via the API (X-API-Key, fx_ prefix, shown once at creation)
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" }'
# Poll one scan (returns a {scan, findings} envelope)
curl https://api.fendix.dev/api/scans/$SCAN_ID -H "X-API-Key: $FENDIX_API_KEY"واجهة SaaS — نظرة عامة على لوحة التحكم
# Workspace overview: totals, severity + category breakdowns, 8-week trend.
# Scope to one org with ?organization=<uuid>, or omit for personal scans.
curl "https://api.fendix.dev/api/dashboard?organization=$ORG_ID" \
-H "X-API-Key: $FENDIX_API_KEY"
# → { total_scans, total_findings, by_severity, by_category, recent_scans, trend }مشغّل ذاتي الاستضافة (خطة Enterprise)
# Self-hosted runner (Enterprise): scan private/internal targets in-network
# and push results to the dashboard. Register once (org admin) → fxr_ token.
TOKEN="fxr_..."
# Claim the next queued job (atomic) → or 204 No Content
curl -X POST https://api.fendix.dev/api/runners/claim -H "X-Runner-Token: $TOKEN"
# Run the engine locally, then submit the JSON report
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