
مجموعة من قواعد Semgrep للتحليل الساكن للكود، وكشف الثغرات الأمنية، وفرض ممارسات البرمجة الآمنة عبر لغات متعددة.
يحتوي هذا المستودع على قواعد Semgrep التي طوّرتها Trail of Bits وأتاحتها للعموم. وهي جزء من جهودنا التطويرية المستمرة وتُستخدم في عمليات تدقيق الأمن لدينا، وأبحاث الثغرات، ومشاريعنا الداخلية. وستتطوّر بمرور الوقت كلما حدّدنا تقنيات جديدة.
زار Testing Handbook للحصول على إرشادات Semgrep.
أسهل طريقة لتشغيل القواعد هي تشغيلها من سجل Semgrep. وللقيام بذلك، انتقل إلى المجلد الجذر لمشروعك وشغّل ما يلي:```shell $ semgrep --config "p/trailofbits"
بدلاً من ذلك، يمكنك استنساخ هذا المستودع، والانتقال إلى المجلد الجذر لمشروعك، وتشغيل القواعد الفردية باستخدام الأمر أدناه:```shell
$ semgrep --config /path/to/semgrep-rules/semgreprule.yml
لتشغيل جميع القواعد من المستودع المستنسخ:```shell $ semgrep --config /path/to/semgrep-rules/ .
## Useful flags
سيقوم Semgrep بالفحص على جميع ملفات التعليمات البرمجية المدعومة باستثناء الملفات الموجودة في ملف `.gitignore` الخاص بك. إذا كنت تريد تشغيل القواعد على جميع الملفات والدلائل، بما في ذلك تلك الموجودة في ملف `.gitignore`، أضف العلم `--no-git-ignore`.```shell
$ semgrep --config /path/to/semgrep-rules/ . --no-git-ignore
يمكنك أيضًا إخبار Semgrep بتجاهل الملفات والمجلدات التي تطابق أي نمط. على سبيل المثال، إذا أردت إخبار Semgrep بتجاهل جميع ملفات اختبار Go، يمكنك تشغيل ما يلي:```shell $ semgrep --config /path/to/semgrep-rules/ . --exclude='*_test.go'
استخدم `-o` لإخراج النتائج إلى ملف:```shell
$ semgrep --config /path/to/semgrep-rules/hanging-goroutine.yml -o leaks.txt'
| ID | التجربة | التأثير | الثقة | الوصف |
|---|---|---|---|---|
| eth-rpc-tracetransaction | 🛝🔗 | 🟥 | 🌕 | يكتشف محاولات استخراج معلومات التتبع من معاملة أو كتلة EVM. في تطبيقات التبادل أو الجسور، يجب تنفيذ منطق إضافي لتغليف هذه النقاط الطرفية لمنع احتساب القيم المنقولة أثناء إطارات الاستدعاء المتراجعة. |
| eth-txreceipt-status | 🛝🔗 | 🟥 | 🌕 | يكتشف عند قراءة حالة إيصال المعاملة |
| hanging-goroutine | 🛝🔗 | 🟩 | 🌗 | تسريبات Goroutine |
| invalid-usage-of-modified-variable | 🛝🔗 | 🟧 | 🌘 | تعيين غير مقصود محتمل عند حدوث خطأ |
| iterate-over-empty-map | 🛝🔗 | 🟩 | 🌗 | من المحتمل تكرار غير ضروري على خريطة فارغة |
| missing-runlock-on-rwmutex | 🛝🔗 | 🟧 | 🌗 | غياب RUnlock على قفل RWMutex قبل العودة من دالة |
| missing-unlock-before-return | 🛝🔗 | 🟧 | 🌗 | غياب فتح mutex قبل العودة من دالة |
| nil-check-after-call | 🛝🔗 | 🟧 | 🌗 | إلغاء مرجعية nil محتمل |
| racy-append-to-slice | 🛝🔗 | 🟧 | 🌗 | استدعاءات متزامنة إلى append من عدة غوروتينات |
| racy-write-to-map | 🛝🔗 | 🟧 | 🌗 | كتابات متزامنة إلى نفس الخريطة في عدة غوروتينات |
| servercodec-readrequestbody-unhandled-nil | 🛝🔗 | 🟩 | 🌘 | تنفيذ غير صحيح محتمل لواجهة ServerCodec |
| string-to-int-signedness-cast | 🛝🔗 | 🟧 | 🌘 | تجاوز سفلي في الأعداد الصحيحة |
| sync-mutex-value-copied | 🛝🔗 | 🟩 | 🌘 | نسخ sync.Mutex عبر مستقبلات القيمة |
| unmarshal-tag-is-dash | 🛝🔗 | 🟧 | 🌘 | |
| unmarshal-tag-is-omitempty | 🛝🔗 | 🟩 | 🌘 | |
| unsafe-dll-loading | 🛝🔗 | 🟥 | 🌘 | استخدام دالة عرضة لهجمات اختطاف DLL |
| waitgroup-add-called-inside-goroutine | 🛝🔗 | 🟧 | 🌗 | استدعاءات sync.WaitGroup.Add داخل غوروتينات مجهولة |
| waitgroup-wait-inside-loop | 🛝🔗 | 🟧 | 🌗 | استدعاءات sync.WaitGroup.Wait داخل حلقة |