Revisão de Segurança (OWASP Top 10 2025) de Frontend Fluig
Esta skill revisa a segurança de código frontend Fluig sob a ótica do OWASP Top 10 2025 e emite achados por severidade; ela não duplica convenções — o arquivo de context/ é a fonte de verdade, referenciada abaixo. Usa apenas API pública e não reescreve o código.
Objetivo
Revisar, com responsabilidade única, a segurança de código frontend de customização Fluig sob a ótica do OWASP Top 10 2025, identificando vulnerabilidades e produzindo um relatório de achados classificados por severidade, cada um vinculado à regra correspondente do arquivo de contexto e à categoria OWASP. Para aplicar as correções, use a skill fluig-validate-security.
Quando Usar
- Antes de um merge, para uma revisão de segurança focada de um widget, Custom Element ou template FreeMarker.
- Quando o código manipula entrada do usuário no DOM, na persistência ou na exibição.
- Quando há uso de
innerHTML, eval()/new Function() ou interpolação dinâmica em FreeMarker.
- Quando dados sensíveis podem estar expostos no cliente ou em chamadas a endpoints.
Entradas Esperadas
| Entrada |
Descrição |
Obrigatória |
| Código alvo |
Trecho ou arquivo frontend a revisar (JS de widget/Custom Element, FreeMarker) |
sim |
| Origem dos dados do usuário |
De onde vêm os dados não confiáveis (formulário, query string, resposta de API, parâmetros) |
não |
| Contexto do artefato |
Tipo do artefato e fluxo de dados |
não |
Contexto de Referência (Fonte de Verdade)
Leia antes de executar — não reproduza o conteúdo aqui:
- conventions.md — seção Segurança (APIs públicas):
WCMAPI.validateXSS, DOMPurify.sanitize, textContent vs innerHTML, escape FreeMarker (${value?html}, ${value?js_string}), proibição de eval()/new Function() com dados dinâmicos, sanitização na entrada e na exibição, e chamadas REST internas via WCMAPI/FLUIGC.ajax.
Referência OWASP Top 10 2025
Esta skill segue a estrutura do OWASP Top 10 2025 (owasp.org/Top10/2025). O escopo de cobertura não muda em relação às revisões anteriores — continua focado em XSS/injeção, exposição de dados sensíveis e configuração insegura no frontend Fluig. Apenas a numeração e a nomenclatura das categorias foram alinhadas à edição 2025:
| Cobertura da skill |
Categoria OWASP 2025 |
Numeração anterior (2021) |
| Injeção / XSS |
A05:2025 – Injection |
A03:2021 |
| Configuração insegura |
A02:2025 – Security Misconfiguration |
A05:2021 |
| Exposição de dados sensíveis |
A04:2025 – Cryptographic Failures |
A02:2021 |
Ao citar a categoria OWASP em um achado, use a numeração 2025 (ex.: A05:2025 Injection).
Regras Aplicáveis (Resumo Executivo)
Somente o mínimo para orientar a revisão, mapeado ao OWASP Top 10 2025; o detalhe está no contexto. Cada achado deve citar a regra de origem. Use apenas API pública.
- Injeção / XSS (A05:2025): entrada do usuário sanitizada com
DOMPurify.sanitize (HTML válido) ou WCMAPI.validateXSS (texto puro) antes de ir ao DOM → ver conventions.md.
- XSS via
innerHTML: preferir textContent; só usar innerHTML com conteúdo já sanitizado → ver conventions.md.
- Injeção via
eval: nunca eval()/new Function() com dados dinâmicos → ver conventions.md.
- Escape de template: dados dinâmicos escapados em FreeMarker (
${value?html}, ${value?js_string}) → ver conventions.md.
- Sanitização na entrada e na exibição (A05:2025): validar tanto em POST/PUT quanto em GET → ver
conventions.md.
- Configuração insegura (A02:2025): chamadas a endpoints internos via
WCMAPI/FLUIGC.ajax (token de sessão automático); sem fetch/$.ajax direto → ver conventions.md.
- Exposição de dados sensíveis (A04:2025): não embutir segredos/tokens no cliente; não logar dados sensíveis.
Escala de Severidade
Classifique cada achado em um destes níveis, considerando explorabilidade e impacto:
| Severidade |
Critério |
Exemplos típicos |
| Crítico |
Vulnerabilidade explorável diretamente, com alto impacto |
XSS por innerHTML com input não sanitizado; eval() sobre dados do usuário; segredo embutido no cliente |
| Alto |
Vulnerabilidade provável ou proteção ausente em fluxo de dados do usuário |
FreeMarker sem escape em dado dinâmico; sanitização ausente na persistência (POST/PUT) |
| Médio |
Fraqueza que depende de condições, mas reduz a postura de segurança |
Sanitização só na entrada, faltando na exibição; chamada interna via fetch direto |
| Baixo |
Endurecimento recomendado de baixo risco imediato |
Log verboso de payload; falta de validação defensiva redundante |
Procedimento
- Mapear o fluxo de dados do usuário (origem → uso no DOM/persistência/exibição) no código revisado.
- Avaliar cada ponto contra as categorias OWASP 2025 aplicáveis: XSS/injeção (A05:2025), exposição de dados (A04:2025), configuração insegura (A02:2025).
- Para cada vulnerabilidade, registrar um achado com localização, descrição, categoria OWASP, severidade e a regra de contexto correspondente (
conventions.md › Segurança).
- Recomendar a correção usando apenas API pública (
DOMPurify.sanitize, WCMAPI.validateXSS, escape FreeMarker), apontando a skill fluig-validate-security.
- Consolidar os achados ordenados do mais grave ao menos grave.
- Validar a revisão com o checklist abaixo antes de entregar.
Saída Esperada
Um relatório de revisão de segurança contendo:
- Resumo com a contagem de achados por severidade e a avaliação geral.
- Achados agrupados por severidade (crítico → baixo); cada um com localização, descrição, categoria OWASP, severidade e a regra de contexto referenciada.
- Recomendações acionáveis com API pública, indicando a skill
fluig-validate-security.
A skill não altera o código — apenas diagnostica e recomenda.
Exemplo de Uso
Trecho revisado e achado correspondente.
// Código revisado (trecho)
container.innerHTML = userInput; // entrada do usuário direto no DOM como HTML
## Achados
### 🔴 Crítico
- **A05:2025 Injeção/XSS — linha 1:** `innerHTML` recebe `userInput` sem sanitização (XSS refletido/armazenado).
- Regra: `conventions.md` › Segurança (APIs públicas).
- Recomendação: usar `textContent` ou `DOMPurify.sanitize(userInput)` antes de inserir; `WCMAPI.validateXSS` para reduzir a texto puro. Ver skill `fluig-validate-security`.
Checklist de Validação
1---2name: fluig-review-security3description: Revisa a segurança de código frontend de customização Fluig sob a ótica do OWASP Top 10 2025 (XSS, injeção, exposição de dados sensíveis, configuração insegura) usando apenas API pública (WCMAPI.validateXSS, DOMPurify.sanitize) e produz achados classificados por severidade, cada um referenciando a regra do arquivo de contexto. Use quando o desenvolvedor pedir uma revisão de segurança de um trecho ou arquivo antes de merge, sem reescrever o código.4---56# Revisão de Segurança (OWASP Top 10 2025) de Frontend Fluig78Esta skill revisa a segurança de código frontend Fluig sob a ótica do OWASP Top 10 2025 e emite achados por severidade; ela **não duplica** convenções — o arquivo de `context/` é a fonte de verdade, referenciada abaixo. Usa **apenas API pública** e **não reescreve** o código.910## Objetivo1112Revisar, com responsabilidade única, a **segurança de código frontend de customização Fluig** sob a ótica do **OWASP Top 10 2025**, identificando vulnerabilidades e produzindo um **relatório de achados classificados por severidade**, cada um vinculado à regra correspondente do arquivo de contexto e à categoria OWASP. Para aplicar as correções, use a skill `fluig-validate-security`.1314## Quando Usar1516- Antes de um merge, para uma revisão de segurança focada de um widget, Custom Element ou template FreeMarker.17- Quando o código manipula **entrada do usuário** no DOM, na persistência ou na exibição.18- Quando há uso de `innerHTML`, `eval()`/`new Function()` ou interpolação dinâmica em FreeMarker.19- Quando dados sensíveis podem estar expostos no cliente ou em chamadas a endpoints.2021## Entradas Esperadas2223| Entrada | Descrição | Obrigatória |24|---------|-----------|-------------|25| Código alvo | Trecho ou arquivo frontend a revisar (JS de widget/Custom Element, FreeMarker) | sim |26| Origem dos dados do usuário | De onde vêm os dados não confiáveis (formulário, query string, resposta de API, parâmetros) | não |27| Contexto do artefato | Tipo do artefato e fluxo de dados | não |2829## Contexto de Referência (Fonte de Verdade)3031Leia antes de executar — não reproduza o conteúdo aqui:3233- [conventions.md](../../context/conventions.md) — seção **Segurança (APIs públicas)**: `WCMAPI.validateXSS`, `DOMPurify.sanitize`, `textContent` vs `innerHTML`, escape FreeMarker (`${value?html}`, `${value?js_string}`), proibição de `eval()`/`new Function()` com dados dinâmicos, sanitização na entrada e na exibição, e chamadas REST internas via `WCMAPI`/`FLUIGC.ajax`.3435## Referência OWASP Top 10 20253637Esta skill segue a estrutura do **OWASP Top 10 2025** ([owasp.org/Top10/2025](https://owasp.org/Top10/2025/)). O escopo de cobertura **não muda** em relação às revisões anteriores — continua focado em XSS/injeção, exposição de dados sensíveis e configuração insegura no frontend Fluig. Apenas a **numeração e a nomenclatura** das categorias foram alinhadas à edição 2025:3839| Cobertura da skill | Categoria OWASP 2025 | Numeração anterior (2021) |40|--------------------|----------------------|----------------------------|41| Injeção / XSS | **A05:2025 – Injection** | A03:2021 |42| Configuração insegura | **A02:2025 – Security Misconfiguration** | A05:2021 |43| Exposição de dados sensíveis | **A04:2025 – Cryptographic Failures** | A02:2021 |4445Ao citar a categoria OWASP em um achado, use a numeração 2025 (ex.: `A05:2025 Injection`).4647## Regras Aplicáveis (Resumo Executivo)4849Somente o mínimo para orientar a revisão, mapeado ao OWASP Top 10 2025; o detalhe está no contexto. Cada achado deve citar a regra de origem. Use **apenas API pública**.5051- **Injeção / XSS (A05:2025):** entrada do usuário sanitizada com `DOMPurify.sanitize` (HTML válido) ou `WCMAPI.validateXSS` (texto puro) antes de ir ao DOM → ver `conventions.md`.52- **XSS via `innerHTML`:** preferir `textContent`; só usar `innerHTML` com conteúdo já sanitizado → ver `conventions.md`.53- **Injeção via `eval`:** **nunca** `eval()`/`new Function()` com dados dinâmicos → ver `conventions.md`.54- **Escape de template:** dados dinâmicos escapados em FreeMarker (`${value?html}`, `${value?js_string}`) → ver `conventions.md`.55- **Sanitização na entrada e na exibição (A05:2025):** validar tanto em POST/PUT quanto em GET → ver `conventions.md`.56- **Configuração insegura (A02:2025):** chamadas a endpoints internos via `WCMAPI`/`FLUIGC.ajax` (token de sessão automático); sem `fetch`/`$.ajax` direto → ver `conventions.md`.57- **Exposição de dados sensíveis (A04:2025):** não embutir segredos/tokens no cliente; não logar dados sensíveis.5859## Escala de Severidade6061Classifique **cada achado** em um destes níveis, considerando explorabilidade e impacto:6263| Severidade | Critério | Exemplos típicos |64|------------|----------|------------------|65| **Crítico** | Vulnerabilidade explorável diretamente, com alto impacto | XSS por `innerHTML` com input não sanitizado; `eval()` sobre dados do usuário; segredo embutido no cliente |66| **Alto** | Vulnerabilidade provável ou proteção ausente em fluxo de dados do usuário | FreeMarker sem escape em dado dinâmico; sanitização ausente na persistência (POST/PUT) |67| **Médio** | Fraqueza que depende de condições, mas reduz a postura de segurança | Sanitização só na entrada, faltando na exibição; chamada interna via `fetch` direto |68| **Baixo** | Endurecimento recomendado de baixo risco imediato | Log verboso de payload; falta de validação defensiva redundante |6970## Procedimento71721. Mapear o fluxo de dados do usuário (origem → uso no DOM/persistência/exibição) no código revisado.732. Avaliar cada ponto contra as categorias OWASP 2025 aplicáveis: XSS/injeção (A05:2025), exposição de dados (A04:2025), configuração insegura (A02:2025).743. Para cada vulnerabilidade, registrar um achado com localização, descrição, **categoria OWASP**, **severidade** e a **regra de contexto** correspondente (`conventions.md` › Segurança).754. Recomendar a correção usando **apenas API pública** (`DOMPurify.sanitize`, `WCMAPI.validateXSS`, escape FreeMarker), apontando a skill `fluig-validate-security`.765. Consolidar os achados ordenados do mais grave ao menos grave.776. Validar a revisão com o checklist abaixo antes de entregar.7879## Saída Esperada8081Um **relatório de revisão de segurança** contendo:8283- **Resumo** com a contagem de achados por severidade e a avaliação geral.84- **Achados** agrupados por severidade (crítico → baixo); cada um com localização, descrição, **categoria OWASP**, severidade e a **regra de contexto referenciada**.85- **Recomendações** acionáveis com API pública, indicando a skill `fluig-validate-security`.8687A skill **não altera** o código — apenas diagnostica e recomenda.8889## Exemplo de Uso9091Trecho revisado e achado correspondente.9293```javascript94// Código revisado (trecho)95container.innerHTML = userInput; // entrada do usuário direto no DOM como HTML96```9798```markdown99## Achados100101### 🔴 Crítico102- **A05:2025 Injeção/XSS — linha 1:** `innerHTML` recebe `userInput` sem sanitização (XSS refletido/armazenado).103 - Regra: `conventions.md` › Segurança (APIs públicas).104 - Recomendação: usar `textContent` ou `DOMPurify.sanitize(userInput)` antes de inserir; `WCMAPI.validateXSS` para reduzir a texto puro. Ver skill `fluig-validate-security`.105```106107## Checklist de Validação108109- [ ] O fluxo de dados do usuário foi mapeado (origem → DOM/persistência/exibição).110- [ ] Cada achado tem **categoria OWASP** e **severidade** atribuídas conforme a escala.111- [ ] Cada achado **referencia a regra** do `conventions.md` › Segurança (com a seção).112- [ ] As recomendações usam **apenas API pública** (`DOMPurify.sanitize`, `WCMAPI.validateXSS`, escape FreeMarker).113- [ ] O relatório está ordenado do mais grave ao menos grave e aponta a skill `fluig-validate-security`.114- [ ] A revisão não alterou o código — apenas diagnosticou e recomendou.