HTTPQL e StreamQL
O Ogma usa um subconjunto da linguagem de consultas compatível com Caido para filtrar o histórico HTTP, o tráfego WebSocket, os resultados de Automação e as visualizações relacionadas.
Sintaxe
As consultas são compostas por cláusulas unidas por AND e OR.
text
req.host:example.com AND resp.code:200Os parênteses agrupam expressões:
text
(req.path.cont:"/api/" OR req.path.cont:"/graphql") AND resp.code.gte:400Há suporte a comentários:
text
// API errors
req.path.cont:"/api/" AND resp.code.gte:500text
/* focus on login */
req.path.cont:"login"Operadores
| Operador | Significado |
|---|---|
: | Igualdade ou correspondência padrão, dependendo do tipo de campo |
.eq: | Igual a |
.ne: | Diferente de |
.cont: | Contém, sem diferenciar maiúsculas e minúsculas |
.ncont: | Não contém, sem diferenciar maiúsculas e minúsculas |
.cs.cont: | Contém, diferenciando maiúsculas e minúsculas |
.cs.ncont: | Não contém, diferenciando maiúsculas e minúsculas |
.like: | Correspondência de padrão do tipo SQL |
.nlike: | Ausência de correspondência de padrão do tipo SQL |
.regex: | Correspondência de expressão regular |
.nregex: | Ausência de correspondência de expressão regular |
.lt: | Menor que |
.lte: | Menor ou igual a |
.gt: | Maior que |
.gte: | Maior ou igual a |
.exists | O cabeçalho existe; use req.header["Name"].value.exists ou o equivalente para a resposta |
Exemplos HTTP
Localize tráfego de API:
text
req.path.cont:"/api/"Localize erros do servidor:
text
resp.code.gte:500Localize respostas grandes:
text
resp.len.gt:100000Localize respostas JSON:
text
resp.header["content-type"].value.cont:"application/json"Localize requisições com cookies:
text
req.header["cookie"].value.existsLocalize tráfego modificado por Interceptação ou Localizar e substituir:
text
req.modified.eq:trueLocalize possíveis caminhos de administração:
text
req.path.cont:"/admin" OR req.path.cont:"/manage"Localize tráfego de reenvio ou automação:
text
source:replay OR source:automateExemplos de streaming
O StreamQL aplica o mesmo estilo de consulta às visualizações de WebSocket e de streaming.
Localize mensagens WebSocket que contenham um campo de token:
text
ws.raw.cont:"token"Localize mensagens do servidor para o cliente:
text
ws.direction.eq:"To Client"Localize mensagens com aparência de JSON:
text
ws.raw.cont:"{" AND ws.raw.cont:"}"Filtros salvos práticos
| Nome | Consulta |
|---|---|
| Erros de API | req.path.cont:"/api/" AND resp.code.gte:400 |
| Endpoints de autenticação | req.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session" |
| Tráfego JSON | resp.header["content-type"].value.cont:"json" |
| Métodos de interesse | req.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE |
| Possíveis segredos | resp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token" |
Limites
Para manter os filtros previsíveis, o Ogma limita a complexidade das consultas:
- Profundidade máxima de aninhamento de expressões: 16.
- Número máximo de cláusulas: 64.
Se uma consulta ficar complexa demais, divida-a em filtros salvos ou use Pesquisa para uma investigação mais ampla.