اختبار أمان التطبيقات الثابت (SAST)
أدوات SAST: Semgrep و CodeQL و SonarQube
3 دقيقة للقراءة
اختيار أداة SAST المناسبة يعتمد على مجموعتك التقنية وميزانيتك ونضجك الأمني. دعنا نقارن بين أفضل ثلاثة خيارات.
مقارنة الأدوات
| الميزة | Semgrep | CodeQL | SonarQube |
|---|---|---|---|
| الرخصة | مفتوح المصدر + تجاري | مجاني للمصدر المفتوح | مجتمعي + تجاري |
| اللغات | 30+ لغة | 10+ لغات | 30+ لغة |
| السرعة | سريع جداً | أبطأ (يحتاج تجميع) | متوسط |
| القواعد المخصصة | YAML (سهل) | لغة QL (معقد) | XML/Java (متوسط) |
| تكامل CI | ممتاز | أصلي في GitHub | ممتاز |
| الأفضل لـ | تبني سريع، قواعد مخصصة | تحليل عميق، مستخدمي GitHub | جودة الكود + الأمان |
Semgrep: سريع ومرن
Semgrep معروف بالسرعة وبساطة صياغة القواعد.
التثبيت
# التثبيت عبر pip
pip install semgrep
# أو عبر Homebrew
brew install semgrep
الاستخدام الأساسي
# التشغيل مع التكوين التلقائي (قواعد المجتمع)
semgrep --config auto .
# تشغيل مجموعات قواعد محددة
semgrep --config p/security-audit --config p/secrets .
# فحص لغات محددة
semgrep --config auto --lang python .
مثال على قاعدة مخصصة
# .semgrep/rules/no-exec.yaml
rules:
- id: dangerous-exec
patterns:
- pattern: exec($X)
message: "تجنب exec() - احتمال حقن كود"
severity: ERROR
languages: [python]
Semgrep في CI
# GitHub Actions
- name: Semgrep Scan
uses: returntocorp/semgrep-action@v1
with:
config: >-
p/security-audit
p/secrets
p/python
CodeQL: تحليل دلالي عميق
CodeQL (من GitHub) يوفر أعمق تحليل لكنه يتطلب التجميع.
الإعداد مع GitHub
# .github/workflows/codeql.yml
name: CodeQL Analysis
on: [push, pull_request]
jobs:
analyze:
runs-on: ubuntu-latest
permissions:
security-events: write
steps:
- uses: actions/checkout@v4
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: javascript, python
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
استعلام CodeQL مخصص
// find-sql-injection.ql
import python
import semmle.python.security.dataflow.SqlInjection
from SqlInjection::Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink
where config.hasFlowPath(source, sink)
select sink.getNode(), source, sink, "SQL injection from $@.", source.getNode(), "user input"
SonarQube: الأمان + الجودة
SonarQube يجمع بين فحص الأمان ومقاييس جودة الكود.
إعداد Docker
# تشغيل SonarQube محلياً
docker run -d --name sonarqube \
-p 9000:9000 \
sonarqube:community
تكوين الماسح
# sonar-project.properties
sonar.projectKey=my-project
sonar.sources=src
sonar.host.url=http://localhost:9000
sonar.token=your-token-here
# إعدادات خاصة بالأمان
sonar.security.hotspots.inheritedRules=true
تكامل CI
# GitHub Actions مع SonarCloud
- name: SonarCloud Scan
uses: SonarSource/sonarcloud-github-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
اختيار الأداة المناسبة
| السيناريو | التوصية |
|---|---|
| شركة ناشئة، إعداد سريع | Semgrep |
| أصلي في GitHub، مشروع مفتوح المصدر | CodeQL |
| مؤسسات، التركيز على جودة الكود | SonarQube |
| أدوات متعددة | Semgrep (سريع) + CodeQL (عميق) |
مصادر القواعد
لا تعيد اختراع العجلة—استخدم قواعد المجتمع:
- سجل Semgrep:
semgrep.dev/r- 3000+ قاعدة - استعلامات CodeQL: مدمجة + مستودع
github/codeql - قواعد SonarQube: مدمجة + إضافات السوق
بعد ذلك، سندمج SAST في GitHub Actions للفحص الآلي. :::