Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

01 - Publicação de Documentos

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Publicação de Documentos

No contexto de um Servidor Web, a publicação de documentos é a função primária que permite que recursos (HTML, imagens, CSS, scripts, PDFs, vídeos) sejam disponibilizados para acesso global via protocolo HTTP/HTTPS. Tecnicamente, publicar um documento não é apenas "copiar um arquivo para uma pasta", mas sim inseri-lo em um ecossistema gerenciado pelo software servidor (Apache, Nginx, IIS, LiteSpeed), que controla permissões, tipos de conteúdo, cache, visibilidade e segurança.

1. O Diretório Raiz de Documentos (Document Root)

Todo servidor web possui uma diretiva de configuração fundamental chamada Document Root (Apache) ou root (Nginx). Este é o diretório no sistema de arquivos (/var/www/html no Linux, C:\inetpub\wwwroot no IIS) que o servidor mapeia como o ponto de partida para a URL principal. Quando o servidor recebe uma requisição para http://exemplo.com/doc.pdf, ele traduz internamente para o caminho físico /var/www/html/doc.pdf.

Configuração em Apache

<VirtualHost *:80>
    ServerName exemplo.com
    DocumentRoot /var/www/exemplo/public
    <Directory /var/www/exemplo/public>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Configuração em Nginx

server {
    listen 80;
    server_name exemplo.com;
    root /var/www/exemplo/public;
    index index.html index.php;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
}

2. Segurança por Isolamento

A publicação garante que o cliente web só consiga acessar arquivos dentro do diretório específico, impedindo navegação por arquivos sensíveis do sistema (ex: /etc/passwd, /etc/shadow).

Ataques Path Traversal

URLs maliciosas como http://exemplo.com/../../../../etc/passwd tentam escapar do Document Root. Servidores modernos normalizam essas URLs (resolvendo .. internamente) e bloqueiam requisições que saiam do diretório.

# Apache: deny all por default, allow apenas no diretório público
<Directory />
    Require all denied
    Options None
    AllowOverride None
</Directory>
<Directory /var/www/html>
    Require all granted
    Options -Indexes
</Directory>

3. Processo de Disponibilização (Deployment)

A publicação envolve a transferência dos documentos do ambiente de desenvolvimento para o servidor de produção, através de:

Métodos Tradicionais

Método Vantagem Desvantagem
SCP/SFTP (SSH) Seguro, simples Manual, sem versionamento
rsync (SSH) Diferencial, rápido Sincronização manual
FTP Veloz Inseguro (senhas em claro)
WebDAV (HTTP) Edição remota Raramente usado hoje

Métodos Modernos (CI/CD)

  • Git push: servidor tem clone do repositório; webhook aciona git pull no deploy.
  • Pipelines CI/CD: GitHub Actions, GitLab CI, Jenkins fazem build, testes e deploy automáticos.
  • Atomic Deploys: nova versão em pasta paralela + symlink swap (zero downtime).
  • Container Deploy: Docker image push + pull no servidor (Kubernetes, Docker Swarm).
tar xzf release-20240115.tar.gz -C /var/www/releases/20240115      # 1. build nova versão
ln -sfn /var/www/releases/20240115 /var/www/exemplo/current       # 2. swap atômico
systemctl reload nginx                                            # 3. reload web
ls -dt /var/www/releases/*/ | tail -n +6 | xargs rm -rf           # 4. manter últimos 5

4. Cabeçalhos de Entidade e MIME Types

Ao publicar um documento, o servidor deve informar ao navegador o que aquele arquivo representa, através do mapeamento de extensões para MIME Types (Multipurpose Internet Mail Extensions, RFC 2045).

Tipos MIME Comuns

Extensão MIME Type Extensão MIME Type
.html/.htm text/html .png image/png
.css text/css .jpg image/jpeg
.js application/javascript .svg image/svg+xml
.json application/json .mp4 video/mp4
.pdf application/pdf .woff2 font/woff2
.exe application/octet-stream

Configuração em Nginx: tipos definidos em /etc/nginx/mime.types (bloco types { ... }).

5. Indexação Automática e Documentos Padrão

Directory Index

Se o usuário acessa uma pasta (ex: http://exemplo.com/imagens/), o servidor procura por um arquivo padrão de publicação, geralmente index.html, index.php ou default.asp.

index index.html index.htm index.php;

Listagem de Diretório

Se o arquivo de índice não existir e a configuração permitir, o servidor gera uma listagem automática de arquivos. Em produção, isso costuma ser desativado por motivos de segurança (evita expor estrutura interna):

Options -Indexes  # Desativar listagem (Apache)
Options +Indexes  # Ativar (apenas para áreas internas)

6. Permissões de Sistema de Arquivos

Um documento só está "tecnicamente publicado" se o processo do servidor web (geralmente o usuário www-data no Debian/Ubuntu, nginx no RHEL, IIS_USR no Windows) tiver permissões de leitura sobre o arquivo.

Modelo de Permissões Recomendado

Dono Grupo Outros Permissão Justificativa
deploy www-data --- 750 (rwxr-x---) Deploy edita, servidor lê
deploy www-data --- 640 (rw-r-----) Arquivos regulares
deploy www-data --- 770 (rwxrwx---) Diretório de upload

Riscos Comuns

  • Permissão 777: qualquer usuário do sistema pode alterar (risco de defacement).
  • Dono www-data: se processo web for comprometido, atacante edita documentos.
  • Permissão 000: documento não será servido (HTTP 403 Forbidden).

7. Publicação Estática vs Dinâmica

Documentos Estáticos

O arquivo existe fisicamente no disco. O servidor apenas lê o conteúdo e o envia pelo socket TCP. Exemplos: .jpg, .css, .txt, .html simples. Vantagens: rápido (pode ser cacheado em CDN), não consome CPU.

Documentos Dinâmicos

O "documento" não existe até o momento da requisição. O servidor executa um interpretador (PHP, Python, Node, Ruby, Java) que gera o HTML em tempo real. Vantagens: conteúdo personalizado, dados atualizados. Desvantagens: consome CPU, difícil de cache.

Híbrido (SSG/ISR)

  • SSG (Static Site Generation): build no deploy gera HTML estático (Gatsby, Next.js, Hugo).
  • ISR (Incremental Static Regeneration): estático mas regenera periodicamente (Next.js).

8. Virtual Hosting (Múltiplos Sites)

Um único servidor web pode publicar documentos de múltiplos domínios no mesmo IP, distinguindo-os pelo cabeçalho HTTP Host: (HTTP/1.1+, RFC 9112).

Tipo Distinção Exemplo
Name-based Por hostname (header Host) Mais comum
IP-based Por IP de chegada Servidor com múltiplos IPs
Port-based Por porta TCP Sites em portas diferentes

9. Serviço de Documentos em CDN

CDNs publicam cópias dos documentos em edges geograficamente distribuídos:

  • Origin pull: primeira requisição busca no servidor, subsequentes no cache do edge.
  • Push: administrador envia documentos para CDN antecipadamente.
  • Invalidation: marcar versão antiga como obsoleta para forçar re-fetch.

10. Auditoria de Publicação

curl -I https://exemplo.com/Documento.pdf | grep -i content-type    # MIME type retornado
curl -I https://exemplo.com/style.css | grep -i cache-control       # headers de cache
apachectl configtest                                              # validar Apache
nginx -t                                                           # validar Nginx
stat /var/www/exemplo/index.html                                  # owner/permissões
find /var/www -perm /o+w -type f                                  # arquivos com permissões inseguras

11. Headers Críticos de Publicação Segura

Header Função
Content-Type, Content-Length, Content-Disposition MIME type, tamanho, sugestão download/inline
Cache-Control, ETag, Last-Modified Diretivas de cache e cache condicional
Content-Encoding gzip, br, deflate
X-Content-Type-Options nosniff (evita MIME sniffing)
X-Frame-Options, Content-Security-Policy Prevenir clickjacking, restringir fontes

12. Conclusão

A publicação de documentos é o ato de transformar dados inertes no disco rígido em recursos endereçáveis e recuperáveis através da World Wide Web. Envolve muito mais do que copiar arquivos: requer planejamento de diretórios, configuração correta de MIME types, controle de permissões, estratégia de deploy (atômico, CI/CD), isolamento de segurança (path traversal, listagem de diretório), headers HTTP de segurança e estratégias de cache (estático, dinâmico, CDN). Uma publicação bem feita garante performance, segurança e disponibilidade — pilares de qualquer serviço web profissional.