You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# Melhorias Efetuadas na Refatoração do Servidor
A refatoração do código do servidor trouxe melhorias significativas em termos de modularidade, segurança, e manutenibilidade. Abaixo estão detalhadas as principais mudanças.
## 1. Eliminação de Variáveis Globais com `http_context`
A mudança mais impactante foi a substituição de variáveis globais por uma estrutura `http_context`.
**Código Antigo (problemático):**
No código antigo, dados essenciais como `headers`, `buffer`, e `mimeType` eram compartilhados entre funções usando `extern`, o que é uma má prática por dificultar o rastreamento de dados e criar potenciais conflitos.
```c
// http/request.h (antigo)
extern char headers[500],
buffer[BUFFER_SIZE],
mimeType[MIMETYPE_SIZE],
status_msg[STATUS_SIZE];
```
**Código Novo (solução):**
O novo código introduz a `http_context`, uma estrutura que encapsula todos os dados de uma requisição HTTP. Essa estrutura é passada como um ponteiro para as funções, garantindo que cada requisição seja tratada de forma isolada.
```c
// mime-type/http/context.h (novo)
typedef struct
{
int client_fd;
char path[255];
char method[8];
char headers[500];
char buffer[BUFFER_SIZE];
char data[BUFFER_OUTPUT_SIZE];
char mimeType[MIMETYPE_SIZE];
char status_msg[STATUS_SIZE];
} http_context;
```
Isso torna o código mais limpo, seguro para futuras implementações de concorrência (threads), e muito mais fácil de depurar.
## 2. Melhoria de Segurança Contra *Path Traversal*
A nova versão do servidor implementa uma proteção robusta contra ataques de *path traversal*, que poderiam permitir que um invasor acessasse arquivos fora do diretório web.
**Código Antigo (vulnerável):**
O código antigo não validava se o caminho do arquivo solicitado estava dentro do diretório raiz permitido.
**Código Novo (seguro):**
A função `regexPath` agora usa `realpath()` para obter o caminho absoluto do arquivo e verifica se ele pertence ao diretório `web`.
```c
// mime-type/utils/regex.c (novo)
char resolved_path[PATH_MAX];
if (realpath(full_path, resolved_path) != NULL)
{
char web_root[PATH_MAX];
if (realpath("web", web_root) != NULL)
{
// Garante que o caminho resolvido está dentro do diretório web
if (strncmp(web_root, resolved_path, strlen(web_root)) == 0)
{
strncpy(path, requested_path, path_size - 1);
path[path_size - 1] = '';
}
else
{
// Tentativa de Path Traversal!
fprintf(stderr, "Path traversal attempt blocked: %s
", requested_path);
strncpy(path, "/404.html", path_size - 1);
path[path_size - 1] = '';
}
}
}
```
## 3. Modularidade e Organização do Código
O código foi reorganizado em uma estrutura mais lógica e autocontida.
- **`http_handler` Centralizado:** A função `http_handler` agora orquestra todo o ciclo de vida da requisição, desde a leitura dos dados do cliente até o envio da resposta final.
- **`Makefile` Independente:** O diretório `mime-type` contém seu próprio `Makefile`, permitindo que o servidor seja compilado como um módulo independente.
- **Funções Especializadas:** A lógica foi dividida em funções menores e mais focadas, como `verifyMimeType`, `httpResponse`, e `regexPath`, melhorando a legibilidade e a manutenibilidade.
## 4. Tratamento de *MIME Type*
O tratamento de *MIME types* foi aprimorado para ser mais explícito e robusto. A função `verifyMimeType` agora é chamada diretamente no `http_handler` e preenche o campo `mimeType` na estrutura `http_context`, garantindo que o `Content-Type` correto seja enviado na resposta HTTP.
## Conclusão
A refatoração modernizou a base de código do servidor, tornando-o mais seguro, modular e preparado para futuras expansões. A eliminação de variáveis globais e a proteção contra *path traversal* são as melhorias mais críticas, alinhando o projeto com práticas de desenvolvimento mais seguras e eficientes.