
يمنعك من إرسال الأسرار وبيانات الاعتماد إلى مستودعات git
.. contents:: :depth: 2
::
git secrets --scan [-r|--recursive] [--cached] [--no-index] [--untracked] [<files>...]
git secrets --scan-history
git secrets --install [-f|--force] [<target-directory>]
git secrets --list [--global]
git secrets --add [-a|--allowed] [-l|--literal] [--global] <pattern>
git secrets --add-provider [--global] <command> [arguments...]
git secrets --register-aws [--global]
git secrets --aws-provider [<credentials-file>]
يقوم git-secrets بفحص الالتزامات (commits) ورسائل الالتزام وعمليات الدمج من نوع --no-ff لمنع إضافة الأسرار إلى مستودعات git الخاصة بك. إذا تطابق الالتزام، أو رسالة الالتزام، أو أي التزام في تاريخ دمج --no-ff مع أحد أنماط التعبير العادية المحظورة التي قمت بتكوينها، فسيتم رفض الالتزام.
يجب وضع git-secrets في مكان ما في مسار PATH الخاص بك بحيث يتم اكتشافه بواسطة git عند تشغيل git secrets.
*nix (لينكس/macOS)
يمكنك استخدام هدف ``install`` من ملف Makefile المقدم لتثبيت ``git secrets`` وصفحة الدليل. يمكنك تخصيص مسار التثبيت باستخدام متغيرات PREFIX و MANPREFIX.
::
make install
ويندوز
~~~~~~~
قم بتشغيل سكريبت PowerShell المقدم ``install.ps1``. سيقوم هذا بنسخ الملفات اللازمة إلى دليل التثبيت (``%USERPROFILE%/.git-secrets`` بشكل افتراضي) وإضافة الدليل إلى متغير PATH الخاص بالمستخدم الحالي.
::
PS > ./install.ps1
Homebrew (لمستخدمي macOS)
::
brew install git-secrets
.. warning::
**لم تنته بعد! يجب عليك تثبيت خطافات git لكل مستودع ترغب في استخدامه مع** ``git secrets --install``.
إليك مثال سريع لكيفية ضمان فحص مستودع git بحثًا عن الأسرار مع كل التزام::
cd /path/to/my/repo
git secrets --install
git secrets --register-aws
أضف قالب تكوين إذا كنت تريد إضافة خطافات إلى جميع المستودعات التي تقوم بتهيئتها أو استنساخها في المستقبل.
::
git secrets --register-aws --global
أضف خطافات إلى جميع مستودعاتك المحلية.
::
git secrets --install ~/.git-templates/git-secrets
git config --global init.templateDir ~/.git-templates/git-secrets
أضف موفرات مخصصة لفحص بيانات اعتماد الأمان.
::
git secrets --add-provider -- cat /path/to/secret/file/patterns
مع git-secrets يمكن أيضًا فحص مستودع بما في ذلك جميع المراجعات:
::
git secrets --scan-history
أوضاع التشغيل
يجب أن يظهر كل خيار من هذه الخيارات أولاً في سطر الأوامر.
``--install``
يقوم بتثبيت خطافات git لمستودع. بمجرد تثبيت الخطافات لمستودع git، سيتم منع الالتزامات وعمليات الدمج غير السريعة لهذا المستودع من ارتكاب الأسرار.
``--scan``
يقوم بفحص ملف واحد أو أكثر بحثًا عن الأسرار. عندما يحتوي ملف على سر، سيتم كتابة النص المتطابق من الملف المفحوص إلى stdout وسيخرج السكريبت بحالة غير صفرية. سيتم كتابة كل سطر متطابق مع اسم الملف الذي تطابق، ونقطتين، ورقم السطر المتطابق، ونقطتين، ثم سطر النص المتطابق. إذا لم يتم توفير أي ملفات، فسيتم فحص جميع الملفات التي يتم إرجاعها بواسطة ``git ls-files``.
``--scan-history``
يقوم بفحص المستودع بما في ذلك جميع المراجعات. عندما يحتوي ملف على سر، سيتم كتابة النص المتطابق من الملف المفحوص إلى stdout وسيخرج السكريبت بحالة غير صفرية. سيتم كتابة كل سطر متطابق مع اسم الملف الذي تطابق، ونقطتين، ورقم السطر المتطابق، ونقطتين، ثم سطر النص المتطابق.
``--list``
يسرد تكوين ``git-secrets`` للمستودع الحالي أو في تكوين git العام.
``--add``
يضيف نمطًا محظورًا أو مسموحًا به.
``--add-provider``
يسجل موفر أسرار. موفرات الأسرار هي ملفات قابلة للتنفيذ عند استدعائها تخرج أنماطًا محظورة يجب على ``git-secrets`` معاملتها كمحظورة.
``--register-aws``
يضيف أنماط AWS الشائعة إلى تكوين git ويضمن عدم العثور على مفاتيح موجودة في ``~/.aws/credentials`` في أي التزام. تتم إضافة الفحوصات التالية:
- معرفات مفتاح الوصول AWS عبر ``(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}``
- مفاتيح API لـ Amazon Bedrock. طويلة العمر عبر ``ABSK[A-Za-z0-9+/]{109,}=*`` وقصيرة العمر عبر ``bedrock-api-key-YmVkcm9jay5hbWF6b25hd3MuY29t``
- تعيينات مفتاح الوصول السري AWS عبر ":" أو "=" محاطة بعلامات اقتباس اختيارية
- تعيينات معرف حساب AWS عبر ":" أو "=" محاطة بعلامات اقتباس اختيارية
- أنماط مسموح بها لمفاتيح AWS سبيل المثال (``AKIAIOSFODNN7EXAMPLE`` و ``wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY``)
- بيانات اعتماد معروفة من ``~/.aws/credentials``
.. note::
على الرغم من أن الأنماط المسجلة بواسطة هذا الأمر يجب أن تلتقط معظم حالات بيانات اعتماد AWS، إلا أن هذه الأنماط **ليست** مضمونة لالتقاطها **جميعًا**. يجب استخدام ``git-secrets`` كوسيلة إضافية للتأمين - ما زلت بحاجة إلى بذل العناية الواجبة لضمان عدم ارتكاب بيانات الاعتماد في مستودع.
``--aws-provider``
موفر أسرار يخرج بيانات الاعتماد الموجودة في ملف INI. يمكنك اختياريًا توفير المسار إلى ملف INI.
خيارات ``--install``
-f, --force
يقوم بالكتابة فوق الخطافات الموجودة إذا كانت موجودة.
<target-directory>
عند توفيره، يقوم بتثبيت خطافات git إلى الدليل المحدد. يتم افتراض الدليل الحالي إذا لم يتم توفير <target-directory>.
إذا كان ``<target-directory>`` المقدم ليس في مستودع git، فسيتم إنشاء الدليل ووضع الخطافات في ``<target-directory>/hooks``. يمكن أن يكون هذا مفيدًا لإنشاء أدلة قوالب git لاستخدامها مع ``git init --template <target-directory>``.
يمكنك تشغيل ``git init`` على مستودع تمت تهيئته بالفعل. من `وثائق git init <https://git-scm.com/docs/git-init>`_:
من وثائق git: تشغيل ``git init`` في مستودع موجود آمن. لن يقوم بالكتابة فوق الأشياء الموجودة بالفعل. السبب الرئيسي لإعادة تشغيل ``git init`` هو لاستلام القوالب المضافة حديثًا (أو لنقل المستودع إلى مكان آخر إذا تم توفير ``--separate-git-dir``).
يتم تثبيت خطافات git التالية:
1. ``pre-commit``: يستخدم للتحقق مما إذا كانت أي من الملفات التي تم تغييرها في الالتزام تستخدم أنماطًا محظورة.
2. ``commit-msg``: يستخدم لتحديد ما إذا كانت رسالة الالتزام تحتوي على أنماط محظورة.
3. ``prepare-commit-msg``: يستخدم لتحديد ما إذا كان التزام الدمج سيقدم تاريخًا يحتوي على نمط محظور في أي نقطة. يرجى ملاحظة أن هذا الخطاف يتم استدعاؤه فقط لعمليات الدمج غير السريعة.
.. note::
يسمح git فقط بتنفيذ سكريبت واحد لكل خطاف. إذا كان المستودع يحتوي على أدلة فرعية على غرار Debian مثل ``pre-commit.d`` و ``commit-msg.d``، فسيتم تثبيت خطافات git في هذه الأدلة، مما يفترض أنك قمت بتكوين الخطافات المقابلة لتنفيذ جميع السكريبتات الموجودة في هذه الأدلة. إذا لم تكن هذه الأدلة الفرعية git موجودة، فسيتم تثبيت خطافات git إلى دليل ``.git/hooks`` الخاص بمستودع git.
أمثلة ^^^^^^^^
تثبيت خطافات git إلى الدليل الحالي::
cd /path/to/my/repository
git secrets --install
تثبيت خطافات git إلى مستودع غير الدليل الحالي::
git secrets --install /path/to/my/repository
إنشاء قالب git يحتوي على git-secrets مثبتًا، ثم نسخ هذا القالب إلى مستودع git::
git secrets --install ~/.git-templates/git-secrets
git init --template ~/.git-templates/git-secrets
الكتابة فوق الخطافات الموجودة إذا كانت موجودة::
git secrets --install -f
خيارات --scan
``-r, --recursive``
يقوم بفحص الملفات المحددة بشكل متكرر. إذا تمت مصادفة دليل، فسيتم فحص الدليل. إذا لم يتم توفير ``-r``، فسيتم تجاهل الأدلة.
لا يمكن استخدام ``-r`` جنبًا إلى جنب مع ``--cached``، أو ``--no-index``، أو ``--untracked``.
``--cached``
يبحث في كائنات blob المسجلة في ملف الفهرس.
``--no-index``
يبحث في الملفات الموجودة في الدليل الحالي التي لا يديرها git.
``--untracked``
بالإضافة إلى البحث في الملفات المتعقبة في شجرة العمل، يقوم ``--scan`` أيضًا في الملفات غير المتعقبة.
``<files>...``
المسار إلى ملف واحد أو أكثر على القرص لفحصها بحثًا عن الأسرار.
إذا لم يتم توفير أي ملفات، فسيتم فحص جميع الملفات التي يتم إرجاعها بواسطة ``git ls-files``.
أمثلة
^^^^^^^^
فحص جميع الملفات في المستودع::
git secrets --scan
فحص ملف واحد بحثًا عن الأسرار::
git secrets --scan /path/to/file
فحص دليل بشكل متكرر بحثًا عن الأسرار::
git secrets --scan -r /path/to/directory
فحص ملفات متعددة بحثًا عن الأسرار::
git secrets --scan /path/to/file /path/to/other/file
يمكنك الفحص باستخدام علامات البدل::
git secrets --scan /path/to/directory/*
فحص من stdin::
echo 'hello!' | git secrets --scan -
خيارات ``--list``
--global
يسرد فقط تكوين git-secrets في تكوين git العام.
خيارات --add
``--global``
يضيف أنماطًا إلى تكوين git العام
``-l, --literal``
يهرب أحرف التعبير العادية الخاصة في النمط المقدم بحيث يتم البحث عن النمط حرفيًا.
``-a, --allowed``
يحدد النمط على أنه مسموح به بدلاً من محظور. تستخدم الأنماط المسموح بها لتصفية النتائج الإيجابية الكاذبة.
``<pattern>``
نمط التعبير العادي للبحث.
أمثلة
^^^^^^^^
يضيف نمطًا محظورًا إلى المستودع الحالي::
git secrets --add '[A-Z0-9]{20}'
يضيف نمطًا محظورًا إلى تكوين git العام::
git secrets --add --global '[A-Z0-9]{20}'
يضيف سلسلة يتم البحث عنها حرفيًا (يتم هروب ``+``)::
git secrets --add --literal 'foo+bar'
يضيف نمطًا مسموحًا به::
git secrets --add -a 'allowed pattern'
خيارات ``--register-aws``
--global
يضيف متغيرات تكوين خاصة بـ AWS إلى تكوين git العام.
خيارات --aws-provider
``[<credentials-file>]``
إذا تم توفيره، يحدد المسار المخصص لملف INI لفحصه. إذا لم يتم توفيره، يتم افتراض ``~/.aws/credentials``.
خيارات ``--add-provider``
--global
يضيف الموفر إلى تكوين git العام.
<command>
أمر الموفر لاستدعائه. عند الاستدعاء، من المتوقع أن يقوم الأمر بكتابة أنماط محظورة مفصولة بأسطر جديدة إلى stdout. يتم تمرير أي وسائط إضافية مقدمة إلى الأمر.
أمثلة ^^^^^^^^
يسجل موفر أسرار مع وسائط::
git secrets --add-provider -- git secrets --aws-provider
يسحب الأسرار من ملف::
git secrets --add-provider -- cat /path/to/secret/file/patterns
يتم استخدام تعبيرات عادية متوافقة مع egrep لتحديد ما إذا كان الالتزام أو رسالة الالتزام تحتوي على أي أنماط محظورة. يتم تحديد هذه التعبيرات العادية باستخدام أمر git config. من المهم ملاحظة أن الأنظمة المختلفة تستخدم إصدارات مختلفة من egrep. على سبيل المثال، عند التشغيل على macOS، ستستخدم إصدارًا مختلفًا من egrep عن عند التشغيل على شيء مثل Ubuntu (BSD مقابل GNU).
يمكنك إضافة أنماط تعبير عادية محظورة إلى تكوين git الخاص بك باستخدام git secrets --add <pattern>.
في بعض الأحيان قد يطابق التعبير العادي نتائج إيجابية كاذبة. على سبيل المثال، تبدو SHA التزامات git مشابهة جدًا لمفاتيح الوصول AWS. يمكنك تحديد العديد من أنماط التعبير العادية المختلفة كنتائج إيجابية كاذبة باستخدام الأمر التالي:
::
git secrets --add --allowed 'my regex pattern'
يمكنك أيضًا إضافة أنماط تعبير عادية لتصفية النتائج الإيجابية الكاذبة إلى ملف .gitallowed الموجود في الدليل الجذر للمستودع. يتم تخطي الأسطر التي تبدأ بـ # (سطر تعليق) وكذلك الأسطر الفارغة.
أولاً، سيقوم git-secrets باستخراج جميع الأسطر من ملف يحتوي على تطابق محظور. ستتضمن النتائج المتطابقة المسار الكامل لاسم الملف الذي تمت مطابقته، متبوعًا بـ ':'، يليه رقم السطر الذي تمت مطابقته، متبوعًا بالسطر الكامل من الملف الذي تمت مطابقته بواسطة نمط سري. بعد ذلك، إذا قمت بتعريف تعبيرات عادية مسموح بها، سيتحقق git-secrets مما إذا كانت جميع الأسطر المتطابقة تطابق واحدًا على الأقل من تعبيراتك العادية المسموح بها المسجلة. إذا تم إلغاء جميع الأسطر التي تم وضع علامة عليها كسرية بواسطة تطابق مسموح به، فإن النص الموضوع لا يحتوي على أي أسرار. إذا لم يتم مطابقة أي من الأسطر المتطابقة بواسطة تعبير عادي مسموح به، فسوف يفشل git-secrets في الالتزام/الدمج/الرسالة.
.. important::
كما أنه من الممارسات السيئة إضافة أنماط محظورة جشعة جدًا، فمن الممارسات السيئة أيضًا إضافة أنماط مسموح بها متسامحة جدًا. تأكد من اختبار أنماطك باستخدام استدعاءات مخصصة لـ ``git secrets --scan $filename`` لضمان عملها كما هو مقصود.
في بعض الأحيان تريد التحقق من تطابق نمط دقيق مع مجموعة من الأسرار المعروفة. على سبيل المثال، قد ترغب في ضمان عدم ظهور أي بيانات اعتماد موجودة في ~/.aws/credentials في أي التزام. في هذه الحالات، من الأفضل ترك هذه الأسرار في موقع واحد بدلاً من نشرها عبر مستودعات git في تكوينات git. يمكنك استخدام "موفرات الأسرار" لجلب هذه الأنواع من بيانات الاعتماد. موفر الأسرار هو ملف قابل للتنفيذ عند استدعائه يخرج أنماطًا محظورة مفصولة بأسطر جديدة.
يمكنك إضافة موفرات أسرار باستخدام أمر --add-provider::
git secrets --add-provider -- git secrets --aws-provider
لاحظ استخدام --. يضمن ذلك تمرير أي وسائط مرتبطة بالموفر إلى الموفر في كل مرة يتم استدعاؤها عند البحث عن الأسرار.
دعنا نلقي نظرة على مثال. بالنظر إلى النص الموضوع التالي (مخزن في /tmp/example)::
This is a test!
password=ex@mplepassword
password=******
More test...
والأنماط المسجلة التالية:
::
git secrets --add 'password\s*=\s*.+'
git secrets --add --allowed --literal 'ex@mplepassword'
تشغيل git secrets --scan /tmp/example، ستؤدي النتيجة إلى إخراج الخطأ التالي::
/tmp/example:3:password=******
[ERROR] Matched prohibited pattern
Possible mitigations:
- Mark false positives as allowed using: git config --add secrets.allowed ...
- List your configured patterns: git config --get-all secrets.patterns
- List your configured allowed patterns: git config --get-all secrets.allowed
- Use --no-verify if this is a one-time false positive
بتفصيل هذا، قيمة النمط المحظور password\s*=\s*.+ ستطابق الأسطر التالية::
/tmp/example:2:password=ex@mplepassword
/tmp/example:3:password=******
...ولكن سيتم تصفية المطابقة الأولى نظرًا لتطابقها مع التعبير العادي المسموح به ex@mplepassword. نظرًا لوجود سطر متبقي لم يتطابق، فإنه يعتبر سرًا.
نظرًا لأن الأسطر المتطابقة توضع على أسطر تبدأ باسم الملف ورقم السطر (على سبيل المثال، /tmp/example:3:...)، يمكنك إنشاء أنماط مسموح بها تأخذ أسماء الملفات وأرقام الأسطر في الاعتبار في التعبير العادي. على سبيل المثال، يمكنك السماح لملف كامل باستخدام شيء مثل::
git secrets --add --allowed '/tmp/example:.*'
git secrets --scan /tmp/example && echo $?
# Outputs: 0
بدلاً من ذلك، يمكنك السماح برقم سطر معين لملف إذا كان من غير المرجح أن يتغير هذا السطر باستخدام شيء مثل ما يلي:
::
git secrets --add --allowed '/tmp/example:3:.*'
git secrets --scan /tmp/example && echo $?
# Outputs: 0
ضع ذلك في الاعتبار عند إنشاء أنماط مسموح بها لضمان عدم مطابقة أنماطك المسموح بها عن غير قصد بسبب تضمين اسم الملف في النص الموضوع الذي تتم مطابقة الأنماط المسموح بها ضده.
استخدم خيار --no-verify في حالة وجود تطابق إيجابي كاذب في التزام أو دمج أو رسالة التزام. سيتجاوز هذا تنفيذ خطاف git ويسمح لك بإجراء الالتزام أو الدمج.
Michael Dowling <https://github.com/mtdowling>_https://github.com/awslabs/git-secrets <https://github.com/awslabs/git-secrets>_حقوق النشر 2015 Amazon.com, Inc. أو الشركات التابعة لها. جميع الحقوق محفوظة.