Syntaxe de recherche
Explore utilise un langage de requête puissant pour effectuer des recherches dans les commits et les patches publics de GitHub. Ce guide couvre la syntaxe essentielle pour construire des recherches efficaces afin de trouver des secrets liés à votre organisation.
Concepts de base de la recherche
Recherche par terme simple
Saisissez un terme dans la barre de recherche pour effectuer une recherche dans tous les champs indexés :
yourcompany
Opérateurs booléens
Combinez des termes à l'aide d'opérateurs booléens :
- AND - Les deux termes doivent être présents
- OR - Au moins un terme doit être présent
- NOT - Exclure un terme
⚠️ Les opérateurs booléens DOIVENT être en MAJUSCULES.
yourcompany AND database
yourcompany OR yourdomain
yourcompany AND NOT test
Pour les requêtes complexes mêlant des opérateurs, utilisez des parenthèses :
(yourcompany OR yourdomain.com) AND database AND NOT test
Recherches par champ
Ciblez des types d'informations spécifiques en indiquant le champ dans lequel effectuer la recherche :
Champs de recherche courants
| Champ | Terme de requête | Description |
|---|---|---|
| Contenu du patch | file.patch | Rechercher dans les modifications de code réelles |
| E-mail de l'auteur | commit.author.email | E-mail de l'auteur du code |
| Nom de l'auteur | commit.author.name | Nom de l'auteur du code |
| Nom d'utilisateur GitHub de l'auteur | author.login | Nom d'utilisateur GitHub de l'auteur |
| E-mail du committer | commit.committer.email | E-mail de la personne ayant réalisé le commit |
| Nom du committer | commit.committer.name | Nom de la personne ayant réalisé le commit |
| Nom d'utilisateur GitHub du committer | committer.login | Nom d'utilisateur GitHub du committer |
| Nom de fichier | file.filename | Nom du fichier modifié |
| Extension de fichier | file.file_extension | Extension du fichier modifié |
Exemples de recherche par champ de base
# Search for patches from a specific email
commit.author.email: john@yourcompany.com
# Search patch content
file.patch: database
# Search across multiple fields
commit.author.email: @yourcompany.com OR file.patch: yourcompany
Rechercher plusieurs mots
Utilisez des guillemets pour rechercher des mots simples apparaissant à proximité les uns des autres :
file.patch: "production database"
Correspondance exacte de mot-clé
Pour des correspondances exactes (sensibles à la casse), ajoutez le suffixe .keyword, sans guillemets :
source_metadata.repo_name.keyword: yourcompany/api-service
Une valeur entre guillemets contenant / ne renvoie aucun résultat : source_metadata.repo_name.keyword: "yourcompany/api-service" ne correspond à aucun dépôt.
Exemples de recherche pratiques
| Ce que vous recherchez | Requête à utiliser |
|---|---|
| Patches contenant un terme | file.patch: yourcompany |
| Patches avec plusieurs termes (OR) | file.patch: yourcompany OR file.patch: yourdomain |
| Patches avec plusieurs termes (AND) | file.patch: yourcompany AND file.patch: database |
| Patches d'un nom d'utilisateur GitHub | author.login: username OR committer.login: username |
| Patches d'un domaine e-mail | commit.author.email: @yourcompany.com OR commit.committer.email: @yourcompany.com |
| Patches d'une personne spécifique | (commit.author.name: "John Doe") OR (commit.committer.name: "John Doe") |
| Patches d'un utilisateur après une date | (author.login: username OR committer.login: username) AND commit.committer.date:{2024-01-01 TO *} |
| Patches d'un utilisateur dans une plage de dates | (author.login: username OR committer.login: username) AND (commit.committer.date:{2024-01-01 TO 2024-03-31}) |
| Patches de plusieurs utilisateurs | (author.login: (user1 OR user2) OR committer.login: (user1 OR user2)) |
| Patches dans un dépôt spécifique | source_metadata.repo_name: yourrepo |
Fonctionnalités de recherche avancées
Types de champs et recherche avancée
Les différents types de champs prennent en charge différentes méthodes de recherche :
Champs de date
Utilisez des opérateurs de plage avec des dates au format ISO 8601. Toutes les dates sont stockées en UTC.
# After a date (inclusive)
source_metadata.created_at:[2024-01-01 TO *]
# Between dates (exclusive start, inclusive end)
commit.author.date:{2024-01-01 TO 2024-03-31]
# Before a date (exclusive)
commit.committer.date:[* TO 2024-01-01}
- Crochets
[]= inclusif - Accolades
{}= exclusif - Astérisque
*= joker pour les plages ouvertes
Champs entiers
Recherchez dans les champs numériques avec des valeurs exactes ou des plages :
# Exactly 10 additions
file.additions: 10
# At least 100 additions
file.additions: [100 TO *]
# Between 50 and 200 additions
file.additions: [50 TO 200]
Champs de texte vs champs de mot-clé
- Champs de texte (par ex.
file.patch) : tokenisés et analysés pour une recherche flexible - Champs de mot-clé (par ex.
source_metadata.repo_name.keyword) : correspondance exacte, sensible à la casse
Traitement des champs de texte
Les champs de texte comme file.patch subissent un traitement complexe :
- Séparation sur les caractères spéciaux (/, :, =, etc.)
- Extraction des termes en camelCase :
GitGuardian→git,guardian,gitguardian - Extraction des parties d'e-mail :
user@company.com→user,company.com,user@company.com - Extraction des composants de domaine et des parties d'adresse IP
- Conversion en minuscules
- Suppression des termes de moins de 3 caractères
Référence complète des champs
| Champ | Type | Description |
|---|---|---|
sha | keyword | SHA du commit |
html_url | path | URL du commit GitHub |
author.id | keyword | ID GitHub de l'auteur |
author.login | keyword | Nom d'utilisateur GitHub de l'auteur |
committer.id | keyword | ID GitHub du committer |
committer.login | keyword | Nom d'utilisateur GitHub du committer |
commit.message | text | Message du commit Git |
commit.author.email | text | E-mail de l'auteur Git |
commit.author.name | text | Nom de l'auteur Git |
commit.author.date | date | Date de l'auteur Git |
commit.committer.email | text | E-mail du committer Git |
commit.committer.name | text | Nom du committer Git |
commit.committer.date | date | Date du committer Git |
file.filename | path | Nom de fichier du patch |
file.patch | text | Contenu du patch |
file.file_extension | keyword | Extension de fichier |
file.sha | keyword | SHA du fichier |
file.additions | int | Lignes ajoutées |
file.deletions | int | Lignes supprimées |
file.changes | int | Lignes modifiées |
source_metadata.created_at | date | Date de traitement GitHub |
source_metadata.repo_id | keyword | ID du dépôt |
source_metadata.repo_name | text | Nom du dépôt |
Note : de nombreux champs disposent à la fois d'une version text et keyword (par ex. commit.author.name vs commit.author.name.keyword).
Limitations de la recherche
Limitations des champs de texte
- Impossible de rechercher des termes de moins de 3 caractères
- Impossible de rechercher des nombres inférieurs à 10 000
- Impossible de rechercher directement des caractères spéciaux :
; , " '= : / \ $ # & ~ | ^ < > [ ] ( ) ? ! § * °` - Impossible d'effectuer une correspondance exacte de sous-chaîne
Recherche de sous-domaine
La recherche de domaine a un comportement spécifique :
- Domaines de 3 niveaux ou moins :
file.patch: company.comcorrespond àapi.company.com - Domaines de plus de 3 niveaux : nécessite une correspondance exacte ou une recherche de sous-domaine intermédiaire
Construire des recherches efficaces
Concentrez vos recherches sur les termes les plus susceptibles d'apparaître à proximité de secrets :
- Domaines d'entreprise :
yourcompany.com,api.yourcompany.com - Modèles d'e-mail :
@yourcompany.com, e-mails d'employés spécifiques - Services internes : noms de bases de données, endpoints d'API, identifiants de service
- Noms de dépôts : dépôts détenus par l'entreprise
- Activité des utilisateurs : noms d'utilisateur d'employés actuels ou anciens
Utilisez des guillemets uniquement pour les mots simples. Sur des valeurs contenant des caractères tels que /, - ou _, les guillemets élargissent la recherche au lieu de la restreindre : file.patch: "payment-service" correspond aussi à auth-service, payment-gateway, et à tout autre élément contenant payment ou service.
À retenir : des recherches plus spécifiques produisent des résultats plus exploitables et aident à rester dans la limite de 10 000 résultats requise pour le scan.
Options de portée de recherche
- Entire Public GitHub : recherche dans tous les dépôts publics de GitHub (par défaut)
- Company perimeter : restreint les recherches au périmètre public de votre entreprise