Aller au contenu principal

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

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

ChampTerme de requêteDescription
Contenu du patchfile.patchRechercher dans les modifications de code réelles
E-mail de l'auteurcommit.author.emailE-mail de l'auteur du code
Nom de l'auteurcommit.author.nameNom de l'auteur du code
Nom d'utilisateur GitHub de l'auteurauthor.loginNom d'utilisateur GitHub de l'auteur
E-mail du committercommit.committer.emailE-mail de la personne ayant réalisé le commit
Nom du committercommit.committer.nameNom de la personne ayant réalisé le commit
Nom d'utilisateur GitHub du committercommitter.loginNom d'utilisateur GitHub du committer
Nom de fichierfile.filenameNom du fichier modifié
Extension de fichierfile.file_extensionExtension 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
N'utilisez pas de guillemets

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 recherchezRequête à utiliser
Patches contenant un termefile.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 GitHubauthor.login: username OR committer.login: username
Patches d'un domaine e-mailcommit.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écifiquesource_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 : GitGuardiangit, guardian, gitguardian
  • Extraction des parties d'e-mail : user@company.comuser, 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

ChampTypeDescription
shakeywordSHA du commit
html_urlpathURL du commit GitHub
author.idkeywordID GitHub de l'auteur
author.loginkeywordNom d'utilisateur GitHub de l'auteur
committer.idkeywordID GitHub du committer
committer.loginkeywordNom d'utilisateur GitHub du committer
commit.messagetextMessage du commit Git
commit.author.emailtextE-mail de l'auteur Git
commit.author.nametextNom de l'auteur Git
commit.author.datedateDate de l'auteur Git
commit.committer.emailtextE-mail du committer Git
commit.committer.nametextNom du committer Git
commit.committer.datedateDate du committer Git
file.filenamepathNom de fichier du patch
file.patchtextContenu du patch
file.file_extensionkeywordExtension de fichier
file.shakeywordSHA du fichier
file.additionsintLignes ajoutées
file.deletionsintLignes supprimées
file.changesintLignes modifiées
source_metadata.created_atdateDate de traitement GitHub
source_metadata.repo_idkeywordID du dépôt
source_metadata.repo_nametextNom 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.com correspond à 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