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

safe-chain v1.5.16

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

مشاركة

Aikido Safe Chain

Aikido Safe Chain

NPM Version NPM Downloads

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

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

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

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


يدعم Aikido Safe Chain مديري الحزم التالية:

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

الاستخدام

Aikido Safe Chain demo

التثبيت

تثبيت Aikido Safe Chain سهل باستخدام نص التثبيت.

Unix/Linux/macOS```shell

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

### ويندوز (PowerShell)```powershell
$installer = Join-Path $env:TEMP "install-safe-chain.ps1"
Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing
$expectedHash = "468C342C5AABB71200B0BD19950984EDD5C4B39811B653B13A5AD15E0FBA4DFA"
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.20/...). إصدارات GitHub غير قابلة للتغيير — بمجرد نشر أحد الملفات على رابط مُرقّم، لا يمكن تعديله أو استبداله، لذا فإن الملف الذي تقوم بتنزيله مضمون ليكون بالضبط ما تم إصداره.

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

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

    • هذه الخطوة حاسمة لأنها تضمن تحميل الأسماء المستعارة للصدفة الخاصة بـ 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. (اختياري) اختبار حظر البرمجيات الخبيثة عبر محاولة تثبيت حزمة اختبارية:

    لـ JavaScript/Node.js: ```shell npm install safe-chain-test

For Python: ```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 ساعة. يوفر هذا طبقة أمان إضافية خلال الفترة الحرجة التي تكون فيها الحزم المنشورة حديثًا الأكثر عرضة لاحتوائها على تهديدات غير مكتشفة. يمكنك تكوين هذا الحد أو تجاوز هذه الحماية بالكامل - راجع قسم Minimum Package Age Configuration أدناه.

تكامل الصدفة

يتكامل 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

يمكن العثور على مزيد من المعلومات حول تكامل الصدفة في shell integration documentation.

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

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

Unix/Linux/macOS```shell

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

### ويندوز (PowerShell)```powershell
iex (iwr "https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/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. وسيطة CLI (أعلى أولوية): ```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" }

logFileFormat — json (افتراضي) أو plain.

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

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

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

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

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

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

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

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

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

  1. وسيط CLI (أعلى أولوية): ```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/*"

## ما هو Kitploit؟

[Kitploit](https://www.kitploit.com/) هو دليل مخصص لأدوات الأمن السيبراني مفتوحة المصدر. يقدم مجموعة منسقة من أدوات الاختراق الأخلاقي، وأدوات تحليل الثغرات الأمنية، وأدوات الاستطلاع، وأدوات تحليل البرمجيات الخبيثة، وغيرها من المرافق الأمنية.```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. وسيطة CLI (أعلى أولوية): ```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 (الملف التنفيذي، shims، السكربتات، الإعدادات) تحت الدليل المخصص بدلاً من `~/.safe-chain`.

### Unix/Linux/macOS```shell
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh \
  && echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd  /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

ويندوز```powershell

$installer = Join-Path $env:TEMP "install-safe-chain.ps1" Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing $expectedHash = "468C342C5AABB71200B0BD19950984EDD5C4B39811B653B13A5AD15E0FBA4DFA" 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. يؤدي هذا إلى إعداد shims قابلة للتنفيذ في PATH بدلاً من الأسماء المستعارة للصدفة.

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

ويندوز (Azure Pipelines، إلخ.)```powershell

$installer = Join-Path $env:TEMP "install-safe-chain.ps1" Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.20/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing $expectedHash = "468C342C5AABB71200B0BD19950984EDD5C4B39811B653B13A5AD15E0FBA4DFA" 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.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
    echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd  /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.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /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.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
          echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd  /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.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
      echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd  /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.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
          echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd  /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.20/install-safe-chain.sh -o /tmp/install-safe-chain.sh
    && echo "0ad25efe15d1fa56105157a454d647223e78eb0c53d1f85e3d10afcd722e7bfd /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`
   * مخرجات أوامر التحقق
   * سجلات مفصلة للأمر الفاشل (أضف الوسيطة `--safe-chain-logging=verbose`)

الفئات