# Relatório de Segurança 06 — Restrição de endpoints de dados

- Data: 2026-06-10
- Severidade: Média (exposição excessiva de dados)
- Status: Concluído

## 1. Risco

Dois endpoints retornavam dados em massa sem filtragem nem seleção de campos:

- `GET /secretarias_dados` (`StructureController@secretarias_dados`): **público** (está na lista `except` do middleware `secretarias`). Retornava `Structure::all()` — incluindo estruturas **inativas/rascunho** e campos internos (`faleConoscoExtraInfo`, `html_page_id`, `news_structure_id`, `page_content_type`, `page_content_order`).
- `GET /telefones_dados` (`PhoneController@telefones_dados`): protegido pelo middleware `secretarias` (autenticado), mas retornava `Phone::all()` (todas as colunas e telefones de estruturas inativas).

Observação: nenhuma referência a esses endpoints foi encontrada no front-end interno (apenas a definição de rota e o controller). `secretarias_dados` aparenta ser um endpoint de dados consumido externamente (portal em projeto separado).

## 2. Correções aplicadas

### 2.1 `secretarias_dados` (público)

`app/Http/Controllers/StructureController.php`:

- filtra `status = ATIVADO` (não vaza registros inativos/rascunho);
- retorna um conjunto curado de campos públicos, **excluindo** campos internos (`faleConoscoExtraInfo`, `html_page_id`, `news_structure_id`, `page_content_type`, `page_content_order`, timestamps);
- ordena por nome.

`routes/web.php`: adicionado `->middleware('throttle:web-public')` (60 req/min por IP) para mitigar abuso/scraping.

### 2.2 `telefones_dados` (autenticado)

`app/Http/Controllers/PhoneController.php`:

- retorna apenas telefones de estruturas **ATIVADAS**;
- seleciona apenas `id`, `structure_id`, `titulo`, `description`.

## 3. Risco de compatibilidade

A resposta de `secretarias_dados` passou a omitir estruturas inativas e alguns campos internos. Caso o portal externo consuma esses campos internos (improvável, pois são de uso administrativo), será necessário ajuste no consumidor. Os campos públicos institucionais (nome, sigla, contato, endereço, gestor, redes sociais) foram preservados.

Recomendação: validar com a equipe do portal externo o contrato esperado.

## 4. Verificação

- `php -l` sem erros nos arquivos alterados.
- Recomendado em homologação: acessar `/secretarias_dados` e confirmar retorno apenas de estruturas ativas com os campos curados; confirmar `throttle` após exceder o limite.

## 5. Arquivos alterados

- `app/Http/Controllers/StructureController.php`
- `app/Http/Controllers/PhoneController.php`
- `routes/web.php`
