العودة إلى التحديثات
New releaseSep 4, 2026

safe-chain v1.5.16

احمِ ضد التعليمات البرمجية الخبيثة المثبتة عبر npm وyarn وpnpm وnpx وpnpx وpip وuv وpoetry باستخدام Aikido Safe Chain. مجاني للاستخدام، لا يتطلب رموزًا.

مشاركة

Aikido Safe Chain

سلسلة أيكيدو الآمنة

NPM Version NPM Downloads

  • حظر البرمجيات الخبيثة على أجهزة المطورين وفي CI/CD
  • يدعم npm وPyPI مع إضافة المزيد من مديري الحزم قريبًا
  • يحظر الحزم الأحدث من 48 ساعة دون كسر البناء الخاص بك
  • بدون رموز مميزة، مجاني، لا تتم مشاركة بيانات البناء

هل تحتاج إلى حماية تتجاوز npm وPyPI؟

حماية أجهزة أيكيدو تُبنى على سلسلة الأمان، لتوسيع أمان الحزم والإضافات عبر المزيد من الأنظمة البيئية: npm، PyPI، VS Code، Open VSX - (Cursor, Windsurf, Kiro, Vs Codium, ...)، Maven، NuGet، إضافات Chrome، Go، مهارات Skills.sh AI، Ruby، Rust، والمزيد.

احصل على إدارة مركزية للسياسات، وسير عمل للطلب والموافقة، ورؤية عبر كل محطة عمل للمطورين في مؤسستك. مدعوم بنفس خلاصة استخبارات أيكيدو. انشره يدويًا أو أدره عبر أداة MDM الخاصة بك (Jamf أو Fleet أو Iru).


تدعم سلسلة أيكيدو الآمنة مديري الحزم التاليين:

  • 📦 npm
  • 📦 npx
  • 📦 yarn
  • 📦 pnpm
  • 📦 pnpx
  • 📦 rush
  • 📦 rushx
  • 📦 bun
  • 📦 bunx
  • 📦 pip
  • 📦 pip3
  • 📦 uv
  • 📦 poetry
  • 📦 uvx
  • 📦 pipx
  • 📦 pdm

الاستخدام

عرض توضيحي لسلسلة أيكيدو الآمنة

التثبيت

تثبيت سلسلة أيكيدو الآمنة سهل باستخدام سكربت التثبيت.

Unix/Linux/macOS```shell

curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.16/install-safe-chain.sh -o /tmp/install-safe-chain.sh
&& echo "7a7b6e54c2e0adbcb53bc1bf7d258cc974f8f31e77ed048b88e4d2e4ac758839 /tmp/install-safe-chain.sh" | sha256sum -c -
&& sh /tmp/install-safe-chain.sh
&& rm /tmp/install-safe-chain.sh

### Windows (PowerShell)```powershell
$installer = Join-Path $env:TEMP "install-safe-chain.ps1"
Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.16/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing
$expectedHash = "6F46B5CFA42DDF9545616E169A567E764CE179E6321E6555D2C3A81768E2635D"
if ((Get-FileHash $installer -Algorithm SHA256).Hash -ne $expectedHash) {
    Remove-Item $installer -ErrorAction SilentlyContinue
    throw "Checksum verification failed for install-safe-chain.ps1"
}
& $installer
Remove-Item $installer

أوامر التثبيت أعلاه تشير دائمًا إلى إصدار محدد. لتثبيت إصدار مختلف، استبدل رقم الإصدار برقم الإصدار المطلوب. جميع الإصدارات المتاحة موجودة في صفحة الإصدارات.

التحقق من سلامة التنزيل

تُقدَّم نصوص التثبيت من رابط إصدار مُرقّم (releases/download/1.5.16/...). إصدارات GitHub غير قابلة للتغيير — بمجرد نشر ملف في رابط مُرقّم لا يمكن تعديله أو استبداله، لذا فإن الملف الذي تقوم بتنزيله مضمون ليكون مطابقًا تمامًا لما تم إصداره.

التحقق من التثبيت

  1. ❗أعد تشغيل الطرفية (Terminal) لبدء استخدام Aikido Safe Chain.

    • هذه الخطوة ضرورية لأنها تضمن تحميل الأسماء المستعارة (aliases) للصدفة الخاصة بـ npm و npx و yarn و pnpm و pnpx و rush و rushx و bun و bunx و pip و pip3 و poetry و uv و uvx و pipx و pdm بشكل صحيح. إذا لم تقم بإعادة تشغيل الطرفية، فلن تكون الأسماء المستعارة متاحة.
  2. تحقق من التثبيت عن طريق تشغيل أمر التحقق: ```shell npm safe-chain-verify pnpm safe-chain-verify pip safe-chain-verify uv safe-chain-verify

    Any other supported package manager: {packagemanager} safe-chain-verify

  • يجب أن يُظهر الإخراج "OK: Safe-chain works!" لتأكيد أن Aikido Safe Chain مثبّت ويعمل بشكل صحيح.
  1. (اختياري) اختبار حظر البرمجيات الخبيثة من خلال محاولة تثبيت حزمة اختبار:

    لجافا سكريبت/Node.js: ```shell npm install safe-chain-test

بالنسبة إلى بايثون: ```shell pip3 install safe-chain-pi-test

- يجب أن يُظهر الإخراج أن Aikido Safe Chain يمنع تثبيت هذه الحزم الاختبارية لأنها مُعلَّمة كبرمجيات خبيثة.

عند تشغيل أوامر `npm`، `npx`، `yarn`، `pnpm`، `pnpx`، `rush`، `rushx`، `bun`، `bunx`، `pip`، `pip3`، `uv`، `uvx`، `poetry`، `pipx` و `pdm`، سيقوم Aikido Safe Chain تلقائيًا بالتحقق من وجود برمجيات خبيثة في الحزم التي تحاول تثبيتها. كما أنه يعترض استدعاءات وحدات Python النمطية لـ pip عند توفرها (مثل `python -m pip install ...`، `python3 -m pip download ...`). إذا تم اكتشاف أي برمجية خبيثة، فسيطلب منك الخروج من الأمر.

يمكنك التحقق من الإصدار المثبت عن طريق تشغيل:```shell
safe-chain --version

كيف يعمل

حظر البرمجيات الخبيثة

تعمل سلسلة أيكيدو الآمنة (Aikido Safe Chain) عن طريق تشغيل خادم وكيل خفيف يعترض تنزيلات الحزم من سجل npm وPyPI. عندما تشغّل أوامر npm أو npx أو yarn أو pnpm أو pnpx أو rush أو rushx أو bun أو bunx أو pip أو pip3 أو uv أو uvx أو poetry أو pipx أو pdm، يتم توجيه جميع تنزيلات الحزم عبر هذا الوكيل المحلي، الذي يتحقق من الحزم في الوقت الفعلي مقابل Aikido Intel - Open Sources Threat Intelligence. إذا تم اكتشاف برمجيات خبيثة في أي حزمة (بما في ذلك التبعيات العميقة)، يقوم الوكيل بحظر التنزيل قبل وصول الكود الخبيث إلى جهازك.

الحد الأدنى لعمر الحزمة

تطبّق السلسلة الآمنة (Safe Chain) فحوصات الحد الأدنى لعمر الحزمة على الأنظمة البيئية المدعومة.

يختلف التنفيذ الحالي حسب النظام البيئي:

  • مديرو حزم npm:
    • أثناء حل الحزم العادي، تقوم السلسلة الآمنة (Safe Chain) بقمع الإصدارات الأحدث من الحد الأدنى للعمر المكوّن من بيانات الحزمة الوصفية التي يعيدها السجل
    • بالنسبة لطلبات تنزيل الحزم المباشرة التي تتجاوز تدفق البيانات الوصفية، يمكن للسلسلة الآمنة (Safe Chain) حظر الطلب نفسه باستخدام قائمة مخزنة مؤقتًا من الحزم المنشورة حديثًا
  • مديرو حزم Python:
    • أثناء حل الحزم، تقوم السلسلة الآمنة (Safe Chain) بقمع الملفات والإصدارات الأحدث من اللازم من استجابات PyPI الوصفية
    • بالنسبة لطلبات تنزيل الحزم المباشرة التي تتجاوز تدفق البيانات الوصفية، يمكن للسلسلة الآمنة (Safe Chain) حظر الطلب نفسه باستخدام قائمة مخزنة مؤقتًا من الحزم المنشورة حديثًا

بشكل افتراضي، الحد الأدنى لعمر الحزمة هو 48 ساعة. يوفر هذا طبقة أمان إضافية خلال الفترة الحرجة التي تكون فيها الحزم المنشورة حديثًا الأكثر عرضة لاحتواء تهديدات غير مكتشفة. يمكنك تكوين هذا الحد أو تجاوز هذه الحماية بالكامل - راجع قسم إعدادات الحد الأدنى لعمر الحزمة أدناه.

التكامل مع الصدفة (Shell)

تتكامل سلسلة أيكيدو الآمنة (Aikido Safe Chain) مع الصدفة لديك لتوفير تجربة سلسة عند استخدام npm أو npx أو yarn أو pnpm أو pnpx أو rush أو rushx أو bun أو bunx ومديري حزم Python (pip وuv وuvx وpoetry وpipx وpdm). تقوم بإعداد أسماء مستعارة لهذه الأوامر بحيث يتم تغليفها بأوامر السلسلة الآمنة (Aikido Safe Chain)، التي تدير خادم الوكيل قبل تنفيذ الأوامر الأصلية. ندعم حاليًا:

  • Bash
  • Zsh
  • Fish
  • PowerShell
  • PowerShell Core

يمكن العثور على مزيد من المعلومات حول التكامل مع الصدفة في وثائق التكامل مع الصدفة.

إلغاء التثبيت

لإلغاء تثبيت سلسلة أيكيدو الآمنة (Aikido Safe Chain)، استخدم أداة إلغاء التثبيت المكونة من سطر واحد:

Unix/Linux/macOS```shell

curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.16/uninstall-safe-chain.sh | sh

### Windows (PowerShell)```powershell
iex (iwr "https://github.com/AikidoSec/safe-chain/releases/download/1.5.16/uninstall-safe-chain.ps1" -UseBasicParsing)

❗أعد تشغيل الطرفية بعد إلغاء التثبيت لضمان إزالة جميع الأسماء المستعارة.

الإعدادات

التسجيل

يمكنك التحكم في المخرجات من Aikido Safe Chain باستخدام علامة --safe-chain-logging أو متغير البيئة SAFE_CHAIN_LOGGING.

خيارات الإعداد

يمكنك ضبط مستوى التسجيل من خلال عدة مصادر (حسب ترتيب الأولوية):

  1. وسيط سطر الأوامر (الأولوية القصوى):

    • --safe-chain-logging=silent - يمنع جميع مخرجات Aikido Safe Chain باستثناء عند حظر البرمجيات الخبيثة. يتم كتابة مخرجات مدير الحزم إلى stdout بشكل طبيعي، ويكتب Safe Chain رسالة قصيرة فقط إذا قام بحظر برمجية خبيثة وتسبب في إنهاء العملية.

      npm install express --safe-chain-logging=silent
      
    • --safe-chain-logging=verbose - يتيح مخرجات تشخيصية مفصلة من Aikido Safe Chain. مفيد لاستكشاف الأخطاء وإصلاحها أو لفهم ما يفعله Safe Chain خلف الكواليس.

      npm install express --safe-chain-logging=verbose
      
  2. متغير البيئة: ```shell export SAFE_CHAIN_LOGGING=verbose npm install express

قيم صالحة: silent، normal، verbose

هذا مفيد لتعيين مستوى تسجيل افتراضي لجميع أوامر مدير الحزم في جلسة الطرفية أو بيئة CI/CD لديك.

تسجيل الملفات

يمكنك عكس مخرجات Aikido Safe Chain إلى ملف سجل باستخدام علامة --safe-chain-log-file أو متغير البيئة SAFE_CHAIN_LOG_FILE. تسجيل الملفات معطّل افتراضيًا ويتم تفعيله عند تعيين مسار. يتم التحكم في تنسيق الملف (--safe-chain-log-file-format) ومستوى التفصيل (--safe-chain-log-file-verbosity) بشكل مستقل عن مخرجات الطرفية.

خيارات التكوين

يمكن التعيين من خلال أيٍّ من هذه الخيارات (حسب ترتيب الأولوية):

  1. وسيط سطر الأوامر (أعلى أولوية): ```shell npm install express
    --safe-chain-log-file=~/safe-chain.log
    --safe-chain-log-file-format=plain
    --safe-chain-log-file-verbosity=normal
  2. متغير البيئة: ```shell export SAFE_CHAIN_LOG_FILE=~/safe-chain.log export SAFE_CHAIN_LOG_FILE_FORMAT=plain export SAFE_CHAIN_LOG_FILE_VERBOSITY=normal
  3. ملف الإعدادات (~/.safe-chain/config.json): ```json { "logFile": "~/safe-chain.log", "logFileFormat": "plain", "logFileVerbosity": "normal" }

logFileFormatjson (الافتراضي) أو plain.

logFileVerbositysilent أو normal أو verbose (الافتراضي). مستقل عن --safe-chain-logging.

الحد الأدنى لعمر الحزمة

يمكنك تكوين المدة التي يجب أن توجد فيها الحزم قبل أن يسمح Safe Chain بتثبيتها. افتراضيًا، يجب أن يكون عمر الحزم 48 ساعة على الأقل قبل أن يمكن تثبيتها.

بالنسبة لمديري الحزم القائمين على npm، يحتوي هذا الفحص حاليًا على وضعين للتنفيذ:

  • يقوم Safe Chain بقمع الإصدارات الأحدث من العمر المحدد من بيانات الحزم الوصفية أثناء حل التبعيات العادي.
  • يقوم Safe Chain بحظر طلبات تنزيل الحزم المباشرة عند مطابقتها مع قائمة الحزم المنشورة حديثًا المخزنة مؤقتًا.

بالنسبة لمديري حزم Python، يحتوي هذا الفحص حاليًا على وضعين للتنفيذ:

  • يقوم Safe Chain بقمع الملفات والإصدارات الأحدث من العمر المحدد من بيانات PyPI الوصفية أثناء حل التبعيات.
  • يقوم Safe Chain بحظر طلبات تنزيل الحزم المباشرة عند مطابقتها مع قائمة الحزم المنشورة حديثًا المخزنة مؤقتًا.

خيارات التكوين

يمكنك تعيين الحد الأدنى لعمر الحزمة من خلال مصادر متعددة (حسب ترتيب الأولوية):

  1. وسيطة سطر الأوامر (أعلى أولوية): ```shell npm install express --safe-chain-minimum-package-age-hours=48
  2. متغير البيئة: ```shell export SAFE_CHAIN_MINIMUM_PACKAGE_AGE_HOURS=48 npm install express
  3. ملف الإعدادات (~/.safe-chain/config.json): ```json { "minimumPackageAgeHours": 48 }

استبعاد الحزم

استبعد الحزم الموثوقة من تصفية الحد الأدنى للعمر عبر متغير بيئة أو ملف إعداد (يتم دمج كلاهما). استخدم @scope/* للثقة بجميع الحزم من مؤسسة:```shell export SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS="@aikidosec/*"

بما أنك لم تقدم النص الفعلي للترجمة في رسالتك، لا يمكنني ترجمته. يرجى إرسال محتوى القطعة (chunk 33) الذي ترغب في ترجمته من الإنجليزية إلى العربية، وسأقوم بترجمته وفقًا للقواعد المحددة.```json
{
  "npm": {
    "minimumPackageAgeExclusions": ["@aikidosec/*"]
  },
  "pip": {
    "minimumPackageAgeExclusions": ["requests"]
  }
}

السجلات المخصصة

قم بتكوين Safe Chain لفحص الحزم من السجلات المخصصة أو الخاصة.

الأنظمة البيئية المدعومة:

  • Node.js
  • Python

خيارات التكوين

يمكنك تعيين سجلات مخصصة من خلال متغير بيئة أو ملف تكوين. يتم دمج كلا المصدرين معًا.

  1. متغير البيئة (مفصول بفواصل): ```shell export SAFE_CHAIN_NPM_CUSTOM_REGISTRIES="npm.company.com,registry.internal.net" export SAFE_CHAIN_PIP_CUSTOM_REGISTRIES="pip.company.com,registry.internal.net"
  2. ملف الإعدادات (~/.safe-chain/config.json): ```json { "npm": { "customRegistries": ["npm.company.com", "registry.internal.net"] }, "pip": { "customRegistries": ["pip.company.com", "registry.internal.net"] } }

ملف تكوين PYPI

إذا كنت تعتمد على ملف pip.conf لإعدادات pip، فيجب عليك توجيه pip إليه صراحةً عبر متغير البيئة PIP_CONFIG_FILE حتى يتمكن Safe Chain من دمجه.

يقوم Safe Chain بتشغيل pip خلف وكيل MITM الخاص به ويكتب ملف تكوين pip مؤقتًا لحقن شهادته وإعدادات الوكيل. عندما يتم تعيين PIP_CONFIG_FILE، يدمج Safe Chain إعداداته في نسخة من ملفك (لا يتم تعديل ملفك الأصلي أبدًا) بحيث يتم الحفاظ على index-url وبيانات الاعتماد والخيارات الأخرى. عندما لا يتم تعيين PIP_CONFIG_FILE، قد يتم استبدال تكوين pip على مستوى المستخدم (مثل ~/.config/pip/pip.conf) بملف Safe Chain المؤقت ولن يتم التقاط إعداداتك.

عنوان URL الأساسي لقائمة البرامج الضارة

قم بتكوين Safe Chain لجلب قواعد بيانات البرامج الضارة وقوائم الحزم الجديدة من عنوان URL لمرآة مخصصة. يتيح لك ذلك استضافة نسختك الخاصة من قاعدة بيانات البرامج الضارة الخاصة بـ Aikido.

خيارات التكوين

يمكنك تعيين عنوان URL الأساسي لقائمة البرامج الضارة من خلال مصادر متعددة (حسب الأولوية):

  1. وسيط سطر الأوامر (أعلى أولوية): ```shell npm install express --safe-chain-malware-list-base-url=https://your-mirror.com
  2. متغير البيئة: ```shell export SAFE_CHAIN_MALWARE_LIST_BASE_URL=https://your-mirror.com npm install express
  3. ملف الإعدادات (~/.safe-chain/config.json): ```json { "malwareListBaseUrl": "https://your-mirror.com" }

يجب أن يشير عنوان URL الأساسي إلى خادم يعكس بنية https://malware-list.aikido.dev/، بما في ذلك المسارات التالية:

  • /malware_predictions.json (قاعدة بيانات البرمجيات الخبيثة لنظام JavaScript البيئي)
  • /malware_pypi.json (قاعدة بيانات البرمجيات الخبيثة لنظام Python البيئي)
  • /releases/npm.json (قائمة الحزم الجديدة لـ JavaScript)
  • /releases/pypi.json (قائمة الحزم الجديدة لـ Python)

ملف إعدادات المشروع

بالإضافة إلى ملف الإعدادات في الدليل الرئيسي (~/.safe-chain/config.json)، يدعم Safe Chain ملف إعدادات للمشروع بحيث يمكن إيداع الإعدادات في مستودع ومشاركتها عبر الفريق، بدلاً من تكوينها لكل جهاز على حدة.

أضف قسم safe-chain: إلى ملف .aikido في جذر مستودعك (نفس الملف الذي تستخدمه أدوات Aikido الأخرى، حيث يقرأ Safe Chain قسم safe-chain: الخاص به فقط ويتجاهل الباقي). عند العثور عليه، يتم دمج إعداداته فوق ملف الإعدادات في الدليل الرئيسي: القيم المحددة في إعدادات المشروع لها الأولوية، ويتم دمج المصفوفات (مثل customRegistries) من كلا الملفين بدلاً من أن يحل أحدهما محل الآخر.

يمكن تعيين الإعدادات التالية فقط من ملف إعدادات المشروع:```yaml safe-chain: minimumPackageAgeHours: 48 npm: customRegistries: - npm.company.com minimumPackageAgeExclusions: - "@aikidosec/*" pip: customRegistries: - pip.company.com minimumPackageAgeExclusions: - requests

الإعدادات مثل `scanTimeout` و`malwareListBaseUrl` وخيارات `logFile*` لا يمكن تعيينها من ملف إعدادات المشروع - بل يمكن أن تأتي فقط من إعدادات الدليل الرئيسي لديك، أو وسائط سطر الأوامر، أو متغيرات البيئة.

## دليل التثبيت المخصص

بشكل افتراضي، يقوم Safe Chain بتثبيت نفسه في `~/.safe-chain`. يمكنك تغيير ذلك عن طريق تمرير دليل تثبيت صريح إلى المثبّت. هذا مفيد للتثبيتات على مستوى النظام (مثل داخل صورة Docker) أو عندما تحتاج إلى تجنب التعارضات مع الأدوات الأخرى.

عند تعيينه، يتم وضع جميع بيانات Safe Chain (الملف الثنائي، والروابط، والبرامج النصية، والإعدادات) تحت الدليل المخصص بدلاً من `~/.safe-chain`.

### Unix/Linux/macOS```shell
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.16/install-safe-chain.sh -o /tmp/install-safe-chain.sh \
  && echo "7a7b6e54c2e0adbcb53bc1bf7d258cc974f8f31e77ed048b88e4d2e4ac758839  /tmp/install-safe-chain.sh" | sha256sum -c - \
  && sh /tmp/install-safe-chain.sh --install-dir /usr/local/.safe-chain \
  && rm /tmp/install-safe-chain.sh

Windows```powershell

$installer = Join-Path $env:TEMP "install-safe-chain.ps1" Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.16/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing $expectedHash = "6F46B5CFA42DDF9545616E169A567E764CE179E6321E6555D2C3A81768E2635D" if ((Get-FileHash $installer -Algorithm SHA256).Hash -ne $expectedHash) { Remove-Item $installer -ErrorAction SilentlyContinue throw "Checksum verification failed for install-safe-chain.ps1" } & $installer -InstallDir 'C:\ProgramData\safe-chain' Remove-Item $installer

# الاستخدام في CI/CD

يمكنك حماية خطوط أنابيب CI/CD الخاصة بك من الحزم الضارة من خلال دمج Aikido Safe Chain في عملية البناء لديك. يضمن ذلك فحص أي حزم يتم تثبيتها أثناء عمليات البناء الآلية بحثًا عن البرامج الضارة قبل التثبيت.

## التثبيت لـ CI/CD

استخدم علامة `--ci` لتكوين Aikido Safe Chain تلقائيًا لبيئات CI/CD. يقوم هذا بإعداد شيمات قابلة للتنفيذ في PATH بدلاً من الأسماء المستعارة للصدفة.

### Unix/Linux/macOS (GitHub Actions, Azure Pipelines, إلخ.)```shell
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.16/install-safe-chain.sh -o /tmp/install-safe-chain.sh \
  && echo "7a7b6e54c2e0adbcb53bc1bf7d258cc974f8f31e77ed048b88e4d2e4ac758839  /tmp/install-safe-chain.sh" | sha256sum -c - \
  && sh /tmp/install-safe-chain.sh --ci \
  && rm /tmp/install-safe-chain.sh

Windows (Azure Pipelines، وما إلى ذلك)```powershell

$installer = Join-Path $env:TEMP "install-safe-chain.ps1" Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.16/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing $expectedHash = "6F46B5CFA42DDF9545616E169A567E764CE179E6321E6555D2C3A81768E2635D" if ((Get-FileHash $installer -Algorithm SHA256).Hash -ne $expectedHash) { Remove-Item $installer -ErrorAction SilentlyContinue throw "Checksum verification failed for install-safe-chain.ps1" } & $installer -ci Remove-Item $installer

## المنصات المدعومة

- ✅ **GitHub Actions**
- ✅ **Azure Pipelines**
- ✅ **CircleCI**
- ✅ **Jenkins**
- ✅ **Bitbucket Pipelines**
- ✅ **GitLab Pipelines**

## مثال على GitHub Actions```yaml
- name: Setup Node.js
  uses: actions/setup-node@v4
  with:
    node-version: "22"
    cache: "npm"

- name: Install safe-chain
  run: |
    curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.16/install-safe-chain.sh -o /tmp/install-safe-chain.sh
    echo "7a7b6e54c2e0adbcb53bc1bf7d258cc974f8f31e77ed048b88e4d2e4ac758839  /tmp/install-safe-chain.sh" | sha256sum -c -
    sh /tmp/install-safe-chain.sh --ci
    rm /tmp/install-safe-chain.sh

- name: Install dependencies
  run: npm ci

مثال Azure DevOps```yaml

  • task: NodeTool@0 inputs: versionSpec: "22.x" displayName: "Install Node.js"

  • script: | curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.16/install-safe-chain.sh -o /tmp/install-safe-chain.sh echo "7a7b6e54c2e0adbcb53bc1bf7d258cc974f8f31e77ed048b88e4d2e4ac758839 /tmp/install-safe-chain.sh" | sha256sum -c - sh /tmp/install-safe-chain.sh --ci rm /tmp/install-safe-chain.sh displayName: "Install safe-chain"

  • script: npm ci displayName: "Install dependencies"

## مثال CircleCI```yaml
version: 2.1
jobs:
  build:
    docker:
      - image: cimg/node:lts
    steps:
      - checkout
      - run: |
          curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.16/install-safe-chain.sh -o /tmp/install-safe-chain.sh
          echo "7a7b6e54c2e0adbcb53bc1bf7d258cc974f8f31e77ed048b88e4d2e4ac758839  /tmp/install-safe-chain.sh" | sha256sum -c -
          sh /tmp/install-safe-chain.sh --ci
          rm /tmp/install-safe-chain.sh
      - run: npm ci
workflows:
  build_and_test:
    jobs:
      - build

مثال Jenkins

ملاحظة: يفترض هذا المثال أن Node.js و npm مثبتان على وكيل Jenkins.```groovy pipeline { agent any

environment { // Jenkins does not automatically persist PATH updates from setup-ci, // so add the shims + binary directory explicitly for all stages. // If you installed into a custom directory, replace ~/.safe-chain with that path here. PATH = "${env.HOME}/.safe-chain/shims:${env.HOME}/.safe-chain/bin:${env.PATH}" }

stages { stage('Install safe-chain') { steps { sh ''' set -euo pipefail

      # Install Safe Chain for CI
      curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.16/install-safe-chain.sh -o /tmp/install-safe-chain.sh
      echo "7a7b6e54c2e0adbcb53bc1bf7d258cc974f8f31e77ed048b88e4d2e4ac758839  /tmp/install-safe-chain.sh" | sha256sum -c -
      sh /tmp/install-safe-chain.sh --ci
      rm /tmp/install-safe-chain.sh
    '''
  }
}

stage('Install project dependencies etc...') {
  steps {
    sh '''
      set -euo pipefail
      npm ci
    '''
  }
}

} }

## مثال Bitbucket Pipelines```yaml
image: node:22

steps:
  - step:
      name: Install
      script:
        - |
          curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.16/install-safe-chain.sh -o /tmp/install-safe-chain.sh
          echo "7a7b6e54c2e0adbcb53bc1bf7d258cc974f8f31e77ed048b88e4d2e4ac758839  /tmp/install-safe-chain.sh" | sha256sum -c -
          sh /tmp/install-safe-chain.sh --ci
          rm /tmp/install-safe-chain.sh
        - export PATH=~/.safe-chain/shims:~/.safe-chain/bin:$PATH
        - npm ci

بعد الإعداد، ستتم حماية جميع أوامر مدير الحزم اللاحقة في خط أنابيب CI الخاص بك تلقائيًا بواسطة كشف البرامج الضارة في Aikido Safe Chain.

مثال على خطوط أنابيب GitLab

لإضافة safe-chain في خطوط أنابيب GitLab، تحتاج إلى تثبيته في الصورة التي تشغّل خط الأنابيب. يمكن القيام بذلك عن طريق:

  1. تعريف ملف dockerfile لتشغيل البناء الخاص بك ```dockerfile FROM node:lts

    Install safe-chain

    RUN curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.16/install-safe-chain.sh -o /tmp/install-safe-chain.sh
    && echo "7a7b6e54c2e0adbcb53bc1bf7d258cc974f8f31e77ed048b88e4d2e4ac758839 /tmp/install-safe-chain.sh" | sha256sum -c -
    && sh /tmp/install-safe-chain.sh --ci
    && rm /tmp/install-safe-chain.sh

    Add safe-chain to PATH (update paths if you used a custom install dir)

    ENV PATH="/root/.safe-chain/shims:/root/.safe-chain/bin:${PATH}"

  2. أنشئ صورة Docker في خط أنابيب CI الخاص بك ```yaml build-image: stage: build-image image: docker:latest services: - docker:dind script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker build -t $CI_REGISTRY_IMAGE:latest . - docker push $CI_REGISTRY_IMAGE:latest

  3. استخدم الصورة في خط أنابيبك: ```yaml npm-ci: stage: install image: $CI_REGISTRY_IMAGE:latest script: - npm ci

خط الأنابيب الكامل لهذا المثال يبدو هكذا:```yaml stages:

  • build-image
  • install

build-image: stage: build-image image: docker:latest services: - docker:dind script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker build -t $CI_REGISTRY_IMAGE:latest . - docker push $CI_REGISTRY_IMAGE:latest

npm-ci: stage: install image: $CI_REGISTRY_IMAGE:latest script: - npm ci

# استكشاف الأخطاء وإصلاحها

هل تواجه مشاكل؟ راجع [دليل استكشاف الأخطاء وإصلاحها](https://github.com/aikidosec/safe-chain/blob/main/docs/troubleshooting.md) للحصول على مساعدة بشأن المشاكل الشائعة.

# الإبلاغ عن المشاكل

إذا واجهت مشاكل:

1. قم بزيارة [GitHub Issues](https://github.com/AikidoSec/safe-chain/issues)
2. قم بتضمين:
   * نظام التشغيل والإصدار
   * نوع الصدفة (Shell) والإصدار
   * مخرجات `safe-chain --version`
   * المخرجات من أوامر التحقق
   * سجلات مفصلة (verbose) للأمر الفاشل (أضف الوسيط `--safe-chain-logging=verbose`)

الفئات