codesentry 0.1.9 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -18
- package/dist/index.js +465 -249
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="docs/assets/logo.png" alt="Logo do CodeSentry" width="640">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
1
5
|
# CodeSentry
|
|
2
6
|
|
|
3
7
|
CLI de verificação de vulnerabilidades e qualidade de código. O scanner
|
|
4
8
|
combina regras próprias para JavaScript/TypeScript e o ruleset OWASP do
|
|
5
9
|
Semgrep CE para as linguagens suportadas por ele.
|
|
6
10
|
|
|
11
|
+
- 🔎 **Dois motores num só comando** — regras próprias em TS/JS + Semgrep CE (OWASP Top 10) para dezenas de outras linguagens.
|
|
12
|
+
- 📦 **Uma instalação, zero fricção** — `npm install -g codesentry` e pronto: sem Python, Docker, Semgrep ou conta em lugar nenhum.
|
|
13
|
+
- 🔌 **100% offline depois de instalado** — nunca consulta a Semgrep Registry nem envia métricas.
|
|
14
|
+
- 🪟🐧 **Windows e Linux nativamente** — sem WSL, sem container.
|
|
15
|
+
- 📊 **Console, JSON ou Markdown** — saída pronta tanto para ler no terminal quanto para plugar em CI.
|
|
16
|
+
|
|
7
17
|
## O que o CodeSentry faz
|
|
8
18
|
|
|
9
19
|
Rodando `codesentry scan` num projeto, dois motores de análise trabalham
|
|
@@ -25,6 +35,22 @@ motor encontrou o problema (prefixo `semgrep/` para achados do Semgrep).
|
|
|
25
35
|
Saídas disponíveis: tabela no console, JSON (`--json`) e, quando há mais
|
|
26
36
|
de 20 problemas, um relatório Markdown detalhado é gerado automaticamente.
|
|
27
37
|
|
|
38
|
+
Exemplo de saída no console:
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
❯ codesentry scan .
|
|
42
|
+
✔ Scanning files...
|
|
43
|
+
┌──────────┬──────────────────────┬─────────────────┬──────┬──────────────────────────────────────────┐
|
|
44
|
+
│ Severity │ Rule │ File │ Line │ Message │
|
|
45
|
+
├──────────┼──────────────────────┼─────────────────┼──────┼──────────────────────────────────────────┤
|
|
46
|
+
│ high │ no-hardcoded-secret │ src/config.ts │ 12 │ Possível segredo hardcoded na variável... │
|
|
47
|
+
│ high │ semgrep/...shell-true│ scripts/run.py │ 8 │ subprocess com shell=True é perigoso... │
|
|
48
|
+
│ medium │ jwt-no-expiration │ src/auth.ts │ 34 │ Token JWT assinado sem "expiresIn"... │
|
|
49
|
+
└──────────┴──────────────────────┴─────────────────┴──────┴──────────────────────────────────────────┘
|
|
50
|
+
|
|
51
|
+
3 problema(s) encontrado(s) em 87 arquivo(s) (4213ms). CodeSentry: 87 JS/TS; Semgrep: 64 arquivo(s).
|
|
52
|
+
```
|
|
53
|
+
|
|
28
54
|
## Como funciona por baixo dos panos
|
|
29
55
|
|
|
30
56
|
O ponto central do design é **zero fricção de instalação**: o usuário final
|
|
@@ -42,20 +68,43 @@ O racional completo está na [ADR 0004](docs/adr/0004-bundled-semgrep-runtime.md
|
|
|
42
68
|
|
|
43
69
|
## Instalação
|
|
44
70
|
|
|
45
|
-
|
|
71
|
+
Pré-requisito único: [Node.js](https://nodejs.org) 22.12 ou mais recente
|
|
72
|
+
(`node --version` para conferir). Nenhum outro requisito — não precisa
|
|
73
|
+
instalar Python, Docker, Semgrep, criar conta ou autenticar em nada.
|
|
74
|
+
|
|
75
|
+
### Windows
|
|
76
|
+
|
|
77
|
+
No PowerShell ou no Prompt de Comando (não precisa de WSL):
|
|
78
|
+
|
|
79
|
+
```powershell
|
|
80
|
+
npm install -g codesentry
|
|
81
|
+
codesentry scan .
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Linux
|
|
46
85
|
|
|
47
86
|
```bash
|
|
48
87
|
npm install -g codesentry
|
|
88
|
+
codesentry scan .
|
|
49
89
|
```
|
|
50
90
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
91
|
+
Em ambos os casos, o `npm install` já resolve automaticamente o pacote de
|
|
92
|
+
runtime compatível com a sua plataforma (Semgrep CE + Python portátil) como
|
|
93
|
+
dependência opcional — é isso que faz `codesentry scan` funcionar com
|
|
94
|
+
cobertura OWASP completa sem nenhuma instalação manual. Plataformas com
|
|
95
|
+
runtime publicado hoje: Linux x64 e Windows x64. Os pacotes têm dezenas de
|
|
96
|
+
MB porque incluem esse runtime embutido; essa é a troca para o scan
|
|
97
|
+
funcionar 100% offline depois de instalado.
|
|
54
98
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
99
|
+
Se `codesentry` não for encontrado no terminal depois de instalado
|
|
100
|
+
globalmente, feche e reabra o terminal (ou rode `npx codesentry scan .`) —
|
|
101
|
+
alguns terminais não recarregam o PATH do npm automaticamente na mesma
|
|
102
|
+
sessão.
|
|
103
|
+
|
|
104
|
+
### A partir do código-fonte (desenvolvimento)
|
|
105
|
+
|
|
106
|
+
Para rodar a partir do repositório clonado, em vez do pacote publicado, use
|
|
107
|
+
`npm link`:
|
|
59
108
|
|
|
60
109
|
```bash
|
|
61
110
|
git clone git@github.com:Ivan-ReisDev/code-sentry.git
|
|
@@ -68,6 +117,16 @@ npm link
|
|
|
68
117
|
Depois disso, o comando `codesentry` fica disponível em qualquer
|
|
69
118
|
diretório do seu terminal.
|
|
70
119
|
|
|
120
|
+
> **Atenção:** `npx codesentry` rodado de dentro deste repositório clonado
|
|
121
|
+
> executa o `dist/index.js` local (o `package.json` daqui se chama
|
|
122
|
+
> `codesentry`, e o `npx` prioriza isso sobre a instalação global/publicada).
|
|
123
|
+
> O workspace de desenvolvimento sempre tem o ruleset do Semgrep vazio por
|
|
124
|
+
> design (populado só via `npm run prepare:owasp-rules` ou durante a release —
|
|
125
|
+
> ver [ADR 0004](docs/adr/0004-bundled-semgrep-runtime.md)), então o scan
|
|
126
|
+
> roda sem erro mas sempre reporta zero arquivos analisados pelo Semgrep.
|
|
127
|
+
> Para testar o pacote publicado de verdade, rode `codesentry scan` (sem
|
|
128
|
+
> `npx`) fora deste diretório.
|
|
129
|
+
|
|
71
130
|
## Uso
|
|
72
131
|
|
|
73
132
|
### `codesentry scan [path]`
|
|
@@ -81,6 +140,7 @@ codesentry scan ./src
|
|
|
81
140
|
codesentry scan . --json
|
|
82
141
|
codesentry scan . --concurrency 4
|
|
83
142
|
codesentry scan . --config ./rules/security.yml
|
|
143
|
+
codesentry scan . --tests
|
|
84
144
|
```
|
|
85
145
|
|
|
86
146
|
O Semgrep CE embutido é executado automaticamente depois das regras nativas,
|
|
@@ -94,36 +154,61 @@ apenas inteiros positivos. Sem valor, o limite é ajustado para a máquina
|
|
|
94
154
|
Semgrep e das regras OWASP chegam em novas releases do CodeSentry. Quando
|
|
95
155
|
necessário, `--config` aceita exclusivamente um arquivo YAML local.
|
|
96
156
|
|
|
157
|
+
Por padrão, arquivos de teste não são analisados: nenhum diretório chamado
|
|
158
|
+
`tests`, `test` ou `__tests__` (em qualquer profundidade) e nenhum arquivo
|
|
159
|
+
com sufixo `.spec.*`/`.test.*` (em qualquer lugar, mesmo fora dessas pastas)
|
|
160
|
+
entra no scan. Use `--tests` para incluí-los.
|
|
161
|
+
|
|
97
162
|
Em macOS, ARM e plataformas sem runtime publicado, o comando interrompe
|
|
98
163
|
explicitamente em vez de declarar uma análise parcial como completa.
|
|
99
164
|
|
|
100
165
|
### `codesentry rules`
|
|
101
166
|
|
|
102
|
-
Lista as regras de análise disponíveis.
|
|
167
|
+
Lista as regras de análise disponíveis (id e descrição de cada uma).
|
|
103
168
|
|
|
104
169
|
```bash
|
|
105
170
|
codesentry rules
|
|
106
171
|
```
|
|
107
172
|
|
|
108
|
-
### `codesentry
|
|
173
|
+
### `codesentry help`
|
|
109
174
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
também roda automaticamente como parte do `codesentry scan`.
|
|
175
|
+
Lista **todos** os comandos disponíveis, sempre atualizada — inclui tanto
|
|
176
|
+
os comandos gerais quanto os individuais listados a seguir.
|
|
113
177
|
|
|
114
178
|
```bash
|
|
115
|
-
codesentry
|
|
116
|
-
codesentry long-functions ./src --json
|
|
179
|
+
codesentry help
|
|
117
180
|
```
|
|
118
181
|
|
|
119
|
-
###
|
|
182
|
+
### Comandos individuais por regra
|
|
120
183
|
|
|
121
|
-
|
|
184
|
+
Cada regra nativa também tem um comando próprio, que roda **só ela** sobre
|
|
185
|
+
um diretório — útil para focar em um tipo de problema específico sem esperar
|
|
186
|
+
o scan completo (e sem o Semgrep, que só roda como parte de `scan`). Todos
|
|
187
|
+
seguem o mesmo formato:
|
|
122
188
|
|
|
123
189
|
```bash
|
|
124
|
-
codesentry
|
|
190
|
+
codesentry <comando> [path] [--json] [--tests]
|
|
125
191
|
```
|
|
126
192
|
|
|
193
|
+
Alguns exemplos:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
codesentry long-functions . # funções com mais de 30 linhas
|
|
197
|
+
codesentry no-eval ./src # uso de eval()
|
|
198
|
+
codesentry xss ./src --json # possíveis XSS (innerHTML, document.write, dangerouslySetInnerHTML)
|
|
199
|
+
codesentry unsafe-sql ./src # SQL injection por concatenação
|
|
200
|
+
codesentry command-injection ./src # child_process com entrada não sanitizada
|
|
201
|
+
codesentry weak-hash-algorithm ./src # uso de MD5/SHA-1 para hashing sensível
|
|
202
|
+
codesentry dependency-audit . # `npm audit` das dependências do projeto (sem --tests: não lê arquivos-fonte)
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Assim como em `scan`, `--tests` inclui arquivos de teste na análise (por
|
|
206
|
+
padrão são ignorados) — exceto em `dependency-audit`, que nunca lê
|
|
207
|
+
arquivos-fonte e por isso não tem essa flag.
|
|
208
|
+
|
|
209
|
+
A lista completa (30+ comandos, um por regra) sai de `codesentry help` —
|
|
210
|
+
mantê-la sempre em sincronia aqui manualmente não seria viável.
|
|
211
|
+
|
|
127
212
|
### `codesentry init`
|
|
128
213
|
|
|
129
214
|
Assistente interativo para configurar o CodeSentry no projeto atual.
|