اختبار أمان التطبيقات الثابت (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 للفحص الآلي. :::

اختبار

الوحدة 2: اختبار أمان التطبيقات الثابت (SAST)

خذ الاختبار
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.