Sobes.tech
Middle

Como pode proteger uma aplicação contra entradas potencialmente perigosas do lado do cliente?

sobes.tech IA

Resposta da IA

Para proteger contra entradas perigosas:

  1. Sanitização de dados: Limpar a entrada do utilizador de código potencialmente malicioso (HTML, JavaScript) antes de a exibir na página.

    // Exemplo de sanitização com DOMPurify
    const cleanHtml = DOMPurify.sanitize(userInput);
    
  2. Escapamento de saída: Converter caracteres especiais nos seus equivalentes seguros antes de os mostrar na página para evitar a execução de código.

    <!-- Exemplo de escapamento -->
    <p id="output"></p>
    <script>
      const userInput = "<script>alert('XSS')</script>";
      document.getElementById('output').textContent = userInput; // Uso de textContent para uma saída segura
    </script>
    
  3. Política de Segurança de Conteúdo (CSP): Configurar o cabeçalho HTTP Content-Security-Policy para limitar as fontes de conteúdo que podem ser carregadas e executadas pelo navegador.

    Content-Security-Policy: default-src 'self'; script-src 'self' https://cdnjs.cloudflare.com; style-src 'self' 'unsafe-inline';
    
  4. Validação de dados: Verificar a entrada do utilizador para que cumpra o formato esperado, tipo de dados e comprimento, tanto no cliente como no servidor.

    // Exemplo de validação no cliente
    if (inputField.value.length > 100) {
      // Erro de validação
    }
    
  5. Utilização de API e bibliotecas seguras: Preferir APIs integradas e bibliotecas confiáveis para trabalhar com DOM, processar dados e evitar o uso direto de innerHTML com dados não sanitizados.

  6. Restrição de privilégios do utilizador: Aplicar o princípio de privilégios mínimos, de modo que a interface do utilizador não permita ações potencialmente perigosas sem a devida autorização.

  7. HTTPS: Utilizar sempre HTTPS para encriptar os dados entre o cliente e o servidor.

  8. Proteção contra CSRF (Cross-Site Request Forgery): Utilizar tokens CSRF para verificar a autenticidade das requisições enviadas pelo cliente.

    // Exemplo de envio de token CSRF
    fetch('/api/update', {
      method: 'POST',
      headers: {
        'X-CSRF-Token': csrfToken
      },
      body: JSON.stringify(data)
    });
    
  9. Flag HttpOnly para cookies: Configurar a flag HttpOnly para cookies de sessão para evitar acesso a eles via JavaScript.

  10. Atualizações regulares de dependências: Manter as bibliotecas e frameworks utilizados atualizados para eliminar vulnerabilidades conhecidas.