Skip to content

Latest commit

 

History

History
94 lines (70 loc) · 3.98 KB

File metadata and controls

94 lines (70 loc) · 3.98 KB
# 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.