
DakshSCRA v0.38-beta
Outil d'analyse statique de code sensible au framework pour une revue automatisée du code source avec des règles spécifiques à la plateforme, analyse de flux de données (taint), estimation d'effort, et lignes de base de suppression.
Daksh SCRA (Source Code Review Assist)```
Author:
- Debasis Mohanty ([email protected])
- Twitter / X: @coffeensecurity
- www.coffeeandsecurity.com
## À propos de Daksh SCRA
Daksh SCRA (Source Code Review Assist) est conçu pour améliorer l'efficacité du processus de revue de code source, en offrant une approche bien structurée et organisée pour les réviseurs de code.
Plutôt que de signaler indistinctement tout comme un problème potentiel, Daksh SCRA favorise une analyse réfléchie, incitant à l'investigation et à la confirmation des problèmes potentiels. Cette approche réduit la précipitation à étiqueter chaque préoccupation potentielle comme un bug, diminuant ainsi la confusion et le temps perdu sur les faux positifs.
### Débuts
Daksh SCRA a été initialement présenté lors d'une session de formation à la revue de code source à Black Hat USA 2022 (6-9 août), où il a été subtilement introduit à un public spécifique. Ses débuts publics officiels ont eu lieu à Black Hat USA 2023 à Las Vegas.
## Fonctionnalités et caractéristiques
- **Identifie les zones d'intérêt dans le code source :** Encourage une investigation et une confirmation ciblées plutôt que d'étiqueter indistinctement tout comme un bug.
- **Identifie les zones d'intérêt dans les chemins de fichiers (première mondiale) :** Reconnaît les motifs dans les chemins de fichiers pour repérer les sections pertinentes à examiner.
- **Reconnaissance au niveau logiciel pour identifier les technologies utilisées :** Identifie les technologies du projet, permettant aux réviseurs de code d'effectuer des analyses précises avec les règles appropriées.
- **Estimation scientifique automatisée de l'effort pour la revue de code (première mondiale) :** Fournit une approche mesurable pour estimer l'effort requis pour une revue de code.
- **Analyse adaptée au framework :** Applique automatiquement les règles spécifiques au framework lorsque celui du projet est détecté.
- **Rapports d'analyse de flux de données (taint) :** Rapports HTML de flux de données par plateforme avec des thèmes mode hacker et mode professionnel.
- **RDL (Rule Description Language) :** Logique de règles externe référencée avec `rdl_ref` et exécutée par le pipeline `core/rdl_engine.py` - prend en charge les portes sensibles aux fichiers, les expressions booléennes, les observations du projet et les métadonnées de logique exportées dans les rapports.
- **État d'analyse / Reprise :** Enregistrez les analyses longues et reprenez-les après une interruption.
- **Base de référence de suppression :** Générez et appliquez une base de référence des faux positifs connus pour les supprimer des futurs rapports.
- **Interface Web :** Lanceur d'analyse basé sur navigateur avec flux de console en temps réel et navigateur d'artefacts de tâches.
> Des améliorations actives sont en cours. De nombreuses nouvelles fonctionnalités et améliorations sont prévues pour les prochaines versions.
N'hésitez pas à contribuer à la mise à jour ou à l'ajout de nouvelles règles et au développement futur.
Si vous trouvez des bugs, signalez-les à [[email protected]](mailto:[email protected]).
Documentation détaillée : [https://dakshlabs.com/#docs](https://dakshlabs.com/#docs)
---
## Pour commencer
Il existe deux façons d'exécuter Daksh SCRA - choisissez celle qui correspond à votre flux de travail :
| | Idéal pour | Accéder à |
|---|---|---|
| 🌐 **Interface Web (Docker)** | La façon la plus simple de démarrer - une commande, un tableau de bord navigateur, une progression d'analyse en direct et un navigateur de rapports/artefacts. Recommandé pour la plupart des utilisateurs. | [Interface Web (Docker)](#web-ui-docker) |
| 💻 **CLI (Python)** | Scripts, pipelines CI ou exécution d'analyses sans Docker. | [Configuration CLI](#cli-setup) |
Les deux chemins exécutent exactement le même moteur d'analyse - l'interface Web est un front-end navigateur au-dessus de la même CLI, donc les résultats sont identiques dans les deux cas.
---
## Interface Web (Docker)
Le moyen le plus rapide d'exécuter Daksh SCRA est via son interface Web basée sur navigateur, lancée avec une seule commande Docker Compose. Elle vous offre un lanceur d'analyse, un flux de console en direct et un historique consultable des rapports passés, sans nécessiter d'environnement Python local.
La configuration Docker exécute l'interface Web et la CLI comme des services indépendants construits à partir de la même image, vous pouvez donc utiliser l'un ou l'autre (ou les deux) à partir du même conteneur.
### Lancer l'interface Web
Mode avant-plan (les journaux sont diffusés dans votre terminal) :```bash
docker compose up --build
Mode détaché / arrière-plan :```bash docker compose up --build -d
Ensuite, ouvrez [http://localhost:8080](http://localhost:8080).
Pour utiliser un autre port :```bash
DAKSH_PORT=9090 docker compose up
Arrêtez la pile avec :```bash docker compose down
### Connexion
L'interface Web nécessite un compte. Au premier démarrage, un compte administrateur initial est créé à partir de `DAKSH_ADMIN_USERNAME` / `DAKSH_ADMIN_PASSWORD` (définissez-les dans `.env`) ; si `DAKSH_ADMIN_PASSWORD` n'est pas défini, un mot de passe aléatoire est généré et affiché une seule fois dans le journal de démarrage de l'API — conservez-le, car il ne peut pas être récupéré par la suite.
Vous devrez définir votre propre mot de passe (et, éventuellement, votre nom d'utilisateur) lors de votre première connexion. Un compte administrateur peut créer d'autres comptes via le point de terminaison d'API `POST /api/v1/auth/users` (aucune interface dédiée pour cela pour l'instant). Consultez `.env.example` pour la liste complète des paramètres liés à l'authentification (durée de session, sécurité des cookies, CORS).
### Ce que vous obtenez
- Générateur de commandes réactif pour les modes scan, recon, estimate, recon+estimate, list et PDF-depuis-JSON
- Flux de console en temps réel et progression en direct par étape pendant l'exécution
- Instantanés d'artefacts par tâche pour les sorties HTML / PDF / JSON
- Navigation rapide dans le navigateur entre le formulaire d'exécution, le flux en direct, les artefacts et les tâches récentes
- Navigateur de répertoires intégré pour sélectionner les chemins cibles (compatible OS : Windows, macOS, Linux / Docker)
Sous le capot, la CLI reste la source de vérité — elle effectue toutes les analyses et génère chaque sortie HTML / PDF / JSON. L'interface Web exécute une tâche active à la fois et capture les sorties de chaque tâche terminée dans `runtime/webui/jobs/<job-id>/artifacts/` afin que les rapports passés restent accessibles.
### Exécution de la CLI dans Docker
Vous n'avez pas non plus besoin d'un environnement Python local pour utiliser la CLI — elle est disponible en tant que service Compose dédié, construit à partir de la même image :```bash
docker compose run --rm cli -h
docker compose run --rm cli -r auto -t /scan-targets/path/to/source
Contenu de l'image
- Backend FastAPI + interface Web frontend
- Le CLI complet Daksh SCRA, en tant que service séparé
- Playwright Chromium, pour la génération de PDF
- Volumes persistants
reports/etruntime/ - Montages de chemins hôtes pour que les scans puissent atteindre les arborescences source depuis l'intérieur du conteneur
Points de montage clés :
| Montage | Chemin dans le conteneur |
|---|---|
| Source du projet | /app |
| Racine de scan par défaut | /scan-targets |
| Alias de lecteurs hôtes | /host, /host/c, /host/d |
| Montages WSL | /mnt, /run/desktop/mnt/host |
Variables d'environnement (à configurer dans .env) :
| Variable | Description |
|---|---|
DAKSH_PORT | Port de l'interface Web (défaut : 8080) |
DAKSH_SCAN_ROOT | Répertoire cible par défaut dans le conteneur |
DAKSH_HOST_SOURCE | Chemin hôte à monter comme /scan-targets (défaut : /tmp) |
DAKSH_HOST_MOUNT | Racine de montage hôte supplémentaire |
DAKSH_HOST_C | Chemin du lecteur C: Windows (WSL) |
DAKSH_HOST_D | Chemin du lecteur D: Windows (WSL) |
DAKSH_DESKTOP_MOUNT | Chemin de montage du bureau WSL |
DAKSH_BROWSE_ROOTS | Remplace les racines du navigateur de répertoires (séparées par des virgules) |
DAKSH_ADMIN_USERNAME | Nom d'utilisateur admin initial (défaut : admin) |
DAKSH_ADMIN_PASSWORD | Mot de passe admin initial - fortement recommandé de le définir explicitement |
Copiez .env.example vers .env et définissez les chemins et identifiants pour votre machine avant d'exécuter Docker.
Configuration du CLI
Vous préférez exécuter Daksh SCRA directement avec Python ? Voici comment le configurer localement.
Prérequis
- Python 3.8+
- Toutes les bibliothèques listées dans
requirements.txt
1. Télécharger Daksh SCRA```bash
git clone https://github.com/coffeeandsecurity/DakshSCRA.git
Ou téléchargez la dernière archive zip depuis [https://github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) et décompressez-la.
### 2. Configurer un environnement virtuel
> 💡 L’environnement virtuel peut être créé dans n’importe quel répertoire — il n’est pas nécessaire qu’il se trouve dans le dossier DakshSCRA.
**Option A : Configuration en une étape (recommandée)**```bash
python setup_env.py
Ce script crée l'environnement virtuel, installe toutes les dépendances et installe le navigateur Chromium de Playwright (requis pour l'export PDF).
Option B : Configuration manuelle
Windows :```bash python -m venv daksh-env .\daksh-env\Scripts\activate
macOS / Linux :```bash
python3 -m venv daksh-env
source daksh-env/bin/activate
Alors installez les dépendances :```bash cd path/to/DakshSCRA pip install -r requirements.txt playwright install chromium
---
## Utilisation en ligne de commande
Utilisez `python` dans un environnement virtuel, ou `python3` en dehors de celui-ci.
### Options de la ligne de commande```
usage: dakshscra.py [-h] [-r RULES] [-f FILE_TYPES] [-v] [-t TARGET_DIR]
[-l {R,RF}] [--recon] [--rs] [--estimate]
[-rpt FORMATS] [--pdf-from-json]
[--json-input-dir PATH] [--pdf-output PATH]
[--pdf-multi-dir PATH] [--pdf-single-only]
[--skip-analysis] [--loc]
[--baseline-file PATH] [--baseline-generate] [--no-baseline]
[--review-config PATH]
[--resume-scan] [--state-file PATH] [--no-state] [--state]
| Option | Description |
|---|---|
-r RULES | Règles de la plateforme (p. ex. php, java, php,java) ou auto pour la détection automatique |
-f FILE_TYPES | Remplace les types de fichiers par défaut pour l'analyse |
-v | Niveau de verbosité (-v, -vv, -vvv) |
-t TARGET_DIR | Répertoire du code source cible |
-l {R,RF} | Liste les règles de la plateforme + frameworks [R] ou inclut les types de fichiers [RF] |
--recon | Exécute la reconnaissance (détection de la plateforme / du framework / du langage) |
--rs, --recon-strict | Reconnaissance stricte : détections à haute confiance uniquement (à utiliser avec --recon) |
--estimate | Estime l'effort de revue de code en fonction de la taille du codebase |
-rpt, --report FORMATS | Formats de rapport : html, pdf, ou html,pdf (par défaut : html) |
--pdf-from-json | Génère des rapports PDF à partir de sorties JSON existantes sans nouvelle analyse |
--json-input-dir PATH | Répertoire des rapports JSON (par défaut : ./reports/data) |
--pdf-output PATH | Chemin de sortie PDF unique (par défaut : ./reports/scan/pdf/report.pdf) |
--pdf-multi-dir PATH | Répertoire de sortie PDF multi-fichiers (par défaut : ./reports/scan/pdf/multi-file) |
--pdf-single-only | Génère uniquement le PDF combiné en un seul fichier ; ignore l'ensemble multi-fichiers par plateforme |
--skip-analysis | Désactive l'étape d'analyse pour cette exécution |
--loc | Compte les lignes de code effectives |
--baseline-file PATH | Fichier de référence de suppression (JSON) |
--baseline-generate | Génère une référence de suppression à partir des résultats actuels |
--no-baseline | Désactive la suppression par référence pour cette exécution |
--review-config PATH | Fichier de triage des résultats (JSON) ; supprime des rapports les faux positifs déjà examinés |
--resume-scan | Reprend une analyse précédemment interrompue à partir du fichier d'état |
--state-file PATH | Chemin personnalisé du fichier d'état / point de contrôle d'analyse |
--no-state | Désactive le point de contrôle d'état d'analyse pour cette exécution |
--state | Force l'activation du point de contrôle d'état d'analyse pour cette exécution |
Exemple d'utilisation
-f(types de fichiers) est facultatif. S'il n'est pas spécifié, DakshSCRA utilise les types de fichiers par défaut pour la ou les plateformes sélectionnées.```bash
Single platform scan
python dakshscra.py -r php -t /path/to/source
Multiple platforms
python dakshscra.py -r php,java,cpp -t /path/to/source
Auto-detect platform and apply matching rules
python dakshscra.py -r auto -t /path/to/source
Override filetypes
python dakshscra.py -r php -f dotnet -t /path/to/source
Reconnaissance only (no scanning)
python dakshscra.py --recon -t /path/to/source
Reconnaissance + scanning
python dakshscra.py --recon -r php -t /path/to/source
Strict recon (high-confidence detections only)
python dakshscra.py --recon --rs -t /path/to/source
Effort estimation
python dakshscra.py --estimate -t /path/to/source
Scan with HTML + PDF report output
python dakshscra.py -r auto -t /path/to/source -rpt html,pdf
Verbosity levels
python dakshscra.py -r php -v -t /path/to/source # default python dakshscra.py -r php -vvv -t /path/to/source # show all pattern checks
Generate suppression baseline from current findings
python dakshscra.py -r auto -t /path/to/source --baseline-generate
Apply suppression baseline (suppress known FPs)
python dakshscra.py -r auto -t /path/to/source --baseline-file config/suppressions.json
Disable baseline for this run
python dakshscra.py -r auto -t /path/to/source --no-baseline
Apply findings triage / review config
python dakshscra.py -r auto -t /path/to/source --review-config config/review.json
Scan with checkpoint state enabled
python dakshscra.py -r auto -t /path/to/source --state
Resume an interrupted scan
python dakshscra.py -r auto -t /path/to/source --resume-scan
Resume with a custom state file
python dakshscra.py -r auto -t /path/to/source --resume-scan --state-file runtime/scan_state.json
Generate PDF from existing JSON outputs (no re-scan)
python dakshscra.py --pdf-from-json
Generate PDF from a custom JSON directory
python dakshscra.py --pdf-from-json --json-input-dir ./custom/reports/data
Custom output paths for PDF
python dakshscra.py --pdf-from-json --pdf-output ./reports/scan/pdf/custom.pdf --pdf-multi-dir ./reports/scan/pdf/multi-file
Single combined PDF only (skip per-platform set)
python dakshscra.py --pdf-from-json --pdf-single-only
### Règles et frameworks de plateformes pris en charge```bash
python dakshscra.py -l R # List platform rules and framework mappings
python dakshscra.py -l RF # List platform rules, framework mappings, and filetypes
Plateformes et frameworks actuellement pris en charge :
| Plateforme | Frameworks |
|---|---|
| dotnet | aspnetcore, entityframework |
| php | codeigniter, drupal, laravel, symfony, wordpress |
| java | hibernate, spring, springboot |
| javascript | angular, express, nestjs, nextjs, react, vue |
| kotlin | ktor, springkotlin |
| python | django, fastapi, flask |
| go | echo, fiber, gin |
| c | freertos |
| cpp | boost, qt |
| android | cordova-android, flutter-android, ionic-android, jetpack, nativescript-android, reactnative-android, xamarin-android |
| ios | cordova-ios, flutter-ios, ionic-ios, nativescript-ios, reactnative-ios, swiftui, uikit, xamarin-ios |
| reactnative | reactnative |
| flutter | flutter |
| xamarin | xamarin |
| ionic | ionic |
| nativescript | nativescript |
| cordova | cordova |
| ruby | rails, sinatra |
| rust | actix, axum, rocket |
| common | - |
Pour obtenir la liste la plus récente des plateformes et frameworks pris en charge, exécutez toujours :```bash python dakshscra.py -l R
---
## Référence de configuration
### `config/tool.yaml`
Les valeurs par défaut du runtime de Daksh SCRA sont contrôlées via `config/tool.yaml`.```yaml
state_management:
enabled: false
resume_mode: manual
persist_after_seconds: 300
persist_interval_seconds: 30
default_state_file: runtime/scan_state.json
cleanup_on_success: false
analysis:
run_by_default: true
include_frameworks: true
report_theme: hacker_mode
Options de configuration de l'analyseur :
analysis.run_by_defaulttrue: l'analyseur s'exécute automatiquement lors de l'analysefalse: l'analyseur est désactivé sauf s'il est réactivé dans la configuration ou via la CLI
analysis.include_frameworkstrue: inclure les entrées d'analyseur au niveau des frameworks lorsque la détection de framework existefalse: sortie de l'analyseur au niveau de la plateforme uniquement
analysis.report_themehacker_mode: thème d'analyseur moderne sombre à contraste élevé (par défaut)professional_mode: thème d'analyseur moderne clairboth: générer les deux variantes de thème côte à côte
Création de règles RDL
RDL (Rule Description Language) est la couche de logique de règles externalisée de DakshSCRA. Dans l'architecture actuelle :
- Les règles XML restent l'inventaire des règles et portent des métadonnées telles que
name,regex, des descriptions et unscan_configfacultatif. - La logique RDL est exécutée par
core/rdl_engine.py. - Les fichiers de logique de règles se trouvent sous
rules/scanning/logic/...et sont référencés depuis le XML à l'aide de<rdl_ref>. - Les valeurs
rdl_refsont résolues par rapport àrules/scanning/, par exemple :logic/php/core/some_rule.rdl->rules/scanning/logic/php/core/some_rule.rdl - Les résultats de logique sont exportés dans le JSON du rapport sous forme de métadonnées telles que
logic_engine,logic_source,logic_reason,logic_trace,logic_consulted_filesetlogic_outcome.
L'ancienne forme inline <rdl> ne fait plus partie de l'architecture active et ne doit pas être utilisée pour les nouvelles règles.
Architecture RDL en un coup d'œil```text
XML rule -> regex / exclude / scan_config / descriptions -> rdl_ref -> rules/scanning/logic///.rdl -> core/rdl_engine.py -> pass / fail -> reason / fail_reason -> trace / consulted_files / outcome
#### Séquence de scan
Pour une règle source, DakshSCRA évalue la logique dans cet ordre :
1. Recon sélectionne les plateformes et frameworks correspondants.
2. La règle XML est chargée depuis `rules/scanning/platform/...`.
3. `regex` identifie les lignes candidates ou les correspondances sur l'ensemble du fichier lorsqu'elles sont présentes.
4. `exclude` supprime le bruit évident pour cette règle, s'il est présent.
5. Le fichier externe `.rdl` de `rdl_ref` est évalué par rapport au texte du fichier actuel, au chemin du fichier actuel et à la racine du projet.
6. Si le script RDL réussit, DakshSCRA conserve la découverte et fusionne les métadonnées de logique exportées dans la sortie du rapport.
7. Si le script RDL échoue, la correspondance est supprimée avec la raison de l'échec RDL et les métadonnées de trace de décision.
Pour les règles de chemin de fichier dans `filepaths.xml`, le même modèle `rdl_ref` s'applique, mais le sujet de correspondance est
le chemin relatif normalisé au lieu du texte du code source. Dans ce mode, RDL reçoit la chaîne du chemin relatif
comme texte du fichier actuel et contexte de chemin.
#### Structure actuelle des règles```xml
<rule>
<name>Rule Name</name>
<regex><![CDATA[regex_to_match]]></regex>
<rdl_ref>logic/common/core/insecure_sql_query_unsafe_string_concatenation.rdl</rdl_ref>
<exclude><![CDATA[pattern_to_exclude_lines]]></exclude> <!-- optional -->
<scan_config>...</scan_config> <!-- optional -->
<rule_desc>Short description of what the rule detects.</rule_desc>
<vuln_desc>Why the pattern matters.</vuln_desc>
<developer>Fix guidance for developers.</developer>
<reviewer>Manual confirmation guidance for reviewers.</reviewer>
</rule>
Structure actuelle `.rdl````text
VERSION 1 WHEN PRESENT /\b(?:mysql_query|mysqli_query|->query)\s*\(/i WHEN EXPR PRESENT:\$_(GET|POST|REQUEST|COOKIE) && MISSING:\b(?:prepare|bindParam|bindValue|PDO::prepare)\b REPORT AS area_of_interest REASON SQL query execution appears reachable without parameterisation in this file. FAIL_REASON Matching query API was found, but the file also contains prepared-statement indicators. TRACE SQLi gate: input source present and mitigation missing.
#### Disposition actuelle```text
rules/
└── scanning/
├── platform/
│ ├── php/php.xml
│ ├── java/java.xml
│ └── ...
└── logic/
├── common/core/
├── php/core/
├── php/framework/laravel/
├── mobile/android/core/
├── filepaths/core/
└── ...
Sémantique d'exécution
WHEN PRESENT,WHEN MISSINGetWHEN CURRENT_FILE_MATCHESs'évaluent par rapport au texte du fichier courant.WHEN FILE_NAME_ISetWHEN FILE_PATH_MATCHESs'évaluent par rapport au contexte du chemin du fichier courant.WHEN EXPRprend en charge la logique booléenne sur les prédicatsPRESENT:,MISSING:etEXISTS:.OBSERVE PROJECT_HAS_GLOB ... AS ...ne conditionne pas le résultat ; il enregistre les fichiers projet associés dans les métadonnées de trace.REPORT AS,REASON,FAIL_REASONetTRACEcontrôlent les métadonnées de rapport exportées.- Les jetons regex peuvent être écrits soit comme des motifs bruts, soit comme
/motif/drapeaux, avec prise en charge dei,mets.
Commandes RDL prises en charge
| Commande | Comportement | Utilisation typique |
|---|---|---|
WHEN PRESENT <regex> | Exiger qu'un motif existe dans le texte du fichier courant | Exiger une API risquée ou un champ sensible co-occurrent |
WHEN MISSING <regex> | Exiger qu'un motif soit absent du texte du fichier courant | Supprimer lorsqu'une atténuation existe déjà |
WHEN EXPR <expr> | Évaluer des expressions booléennes à l'aide de PRESENT: / MISSING: / EXISTS: avec &&, ` | |
WHEN CURRENT_FILE_MATCHES <regex> | Correspondre au texte complet du fichier courant | Revérifier des conditions complexes sur l'ensemble du fichier |
WHEN FILE_NAME_IS <nom> | Exiger que le nom du fichier courant corresponde exactement | Limiter les règles plist / manifest / config |
WHEN FILE_PATH_MATCHES <glob> | Exiger que le chemin relatif courant corresponde à un glob | Restreindre les règles de chemin framework/config |
UNLESS CURRENT_FILE_MATCHES <regex> | Échouer lorsque le fichier entier correspond à un motif d'exclusion | Bloquer les cas structurels connus comme sûrs |
OBSERVE PROJECT_HAS_GLOB <glob> AS <étiquette> | Enregistrer les fichiers projet associés dans les métadonnées de trace | Mettre en évidence les fichiers de configuration ou compagnons associés |
REPORT AS <résultat> | Définir le résultat de la règle, généralement area_of_interest | Résultats explicites pérennes |
REASON <texte> | Raison affichée lorsque la règle passe | Expliquer pourquoi le résultat est resté visible |
FAIL_REASON <texte> | Raison affichée lorsque la règle supprime une correspondance | Expliquer pourquoi la correspondance a été filtrée |
TRACE <texte> | Ajouter des lignes de trace de décision/débogage | Prise en charge de la migration/débogage |
Les expressions booléennes dans WHEN EXPR prennent en charge :
PRESENT:<regex>MISSING:<regex>EXISTS:<regex>&&,||,!et les parenthèses
Exemple 1 - Conditionnement d'injection SQL PHP
Règle XML :```xml Possible SQL Injection in Query Execution query)\s*\(]]> <rdl_ref>logic/common/core/insecure_sql_query_unsafe_string_concatenation.rdl</rdl_ref> <rule_desc>...</rule_desc>
External RDL :```text
VERSION 1
WHEN PRESENT /\b(?:mysql_query|mysqli_query|->query)\s*\(/i
WHEN EXPR PRESENT:\$_(GET|POST|REQUEST|COOKIE) && MISSING:\b(?:prepare|bindParam|bindValue|PDO::prepare)\b
REPORT AS area_of_interest
REASON Query execution appears to rely on direct input without parameterisation.
FAIL_REASON Query API matched, but parameterised query indicators were also found in the file.
Exemple 2 - Règle de manifeste Android avec vérifications tenant compte des fichiers
Règle XML :```xml Exported Components Without Permission activity|service|receiver|provider)\s[^>]*android:name="(?P[^"]+)"[^>]*android:exported="true"[^>]*(?:/>|>)]]> <rdl_ref>logic/mobile/android/core/exported_components.rdl</rdl_ref> <scan_config>...</scan_config>
External RDL :```text
VERSION 1
WHEN FILE_NAME_IS AndroidManifest.xml
WHEN CURRENT_FILE_MATCHES /android:exported\s*=\s*"true"/i
WHEN MISSING /android:permission\s*=\s*"/i
REPORT AS area_of_interest
REASON Exported component appears reachable without a permission guard.
Exemple 3 - Règle de zone d'intérêt basée sur le chemin de fichier
Règle XML :```xml Admin Section File Path <rdl_ref>logic/filepaths/core/admin_section.rdl</rdl_ref>
External RDL :```text
VERSION 1
WHEN CURRENT_FILE_MATCHES /(^|\/)(admin|administrator|root)(\/|$)/i
UNLESS CURRENT_FILE_MATCHES /(^|\/)(tests?|docs?|samples?|examples?)(\/|$)/i
REPORT AS area_of_interest
REASON File path suggests privileged application functionality.
FAIL_REASON Path matched an excluded documentation or sample location.
Directives de rédaction
- Gardez
regexsuffisamment large pour détecter les candidats, puis utilisez RDL pour filtrer le contexte. - Privilégiez
rdl_refpour toute la logique des règles et conservez le fichier.rdlà côté de l’arborescence de logique de la plateforme/cadre appropriée. - N’ajoutez pas de nouveaux blocs
<rdl>en ligne. - Utilisez
WHEN PRESENT/WHEN MISSINGpour les portes simples etWHEN EXPRuniquement lorsque la logique est réellement booléenne. - Placez le raisonnement destiné aux réviseurs dans
REASONet les explications de suppression dansFAIL_REASON. - Traitez
PRESENTetMISSINGcomme des vérifications à l’échelle du fichier. Une atténuation n’importe où dans le fichier peut supprimer chaque correspondance de ce fichier. - Utilisez
OBSERVE PROJECT_HAS_GLOBpour enrichir les résultats avec le contexte du projet, et non comme une porte de réussite/échec. - Gardez les chemins
logic/...stables et limités à la plateforme afin que les règles XML restent légères et que la couche logique reste réutilisable.
Structure de sortie des rapports
Toutes les sorties sont écrites sous le répertoire reports/ :```
reports/
├── scan/
│ ├── html/
│ │ ├── report.html # Single-file HTML scan report
│ │ └── multi-file/ # Per-platform HTML report set
│ ├── pdf/
│ │ ├── report.pdf # Single-file PDF scan report
│ │ └── multi-file/ # Per-platform PDF report set
│ ├── recon/
│ │ └── reconnaissance.html # Reconnaissance HTML report
│ └── estimate/
│ └── estimation.html # Effort estimation HTML report
├── analysis/
│ └── /
│ ├── analysis.html # Taint analysis report (default theme)
│ ├── analysis_professional.html # Professional theme (if theme=both)
│ ├── analysis_xref.html # Cross-reference report
│ └── analysis.json # Structured analysis data
└── data/
├── areas_of_interest.json # AoI findings
├── filepaths_aoi.json # File path AoI findings
├── summary.json # Scan summary
├── recon.json # Recon summary
└── analysis.json # Analyzer output
Les fichiers d’exécution (état d’analyse, journaux, inventaire) sont écrits sous `runtime/`.
Lors de l’exécution via l’interface Web, les sorties de chaque tâche sont en outre enregistrées sous forme d’instantanés dans `runtime/webui/jobs/<job-id>/artifacts/` (voir [Interface Web (Docker)](#web-ui-docker)).
---
## Auteur
| | |
|---|---|
| Site web | [coffeeandsecurity.com](https://www.coffeeandsecurity.com) |
| E-mail | [email protected] |
| Twitter / X | [@coffeensecurity](https://x.com/coffeensecurity) |
| Source | [github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) |
| Licence | Licence publique générale GNU v3.0 (GPL-3.0) |
Si DakshSCRA a aidé votre équipe à économiser un temps, des efforts ou des coûts considérables, à réduire sa dépendance aux outils commerciaux onéreux, à améliorer la couverture des revues, ou à rendre la revue de code plus structurée et efficace, n’hésitez pas à nous contacter et à partager votre expérience. Je suis toujours ouvert aux retours réfléchis et aux conversations intéressantes.
Vous avez trouvé un bug ou souhaitez contribuer ? Ouvrez une issue ou une pull request sur GitHub.