Segurança Nathan Geeksman

Compliance para devs: LGPD e GDPR traduzidos em decisões de código

Compliance para devs: LGPD e GDPR traduzidos em decisões de código

Compliance para devs: LGPD e GDPR traduzidos em decisões de código

Introdução

No contexto atual, a privacidade dos dados dos usuários tem ganhado destaque devido a casos de violação de dados e uso não autorizado desses mesmos dados.

A LGPD (Lei Geral de Proteção de Dados) no Brasil e o GDPR (Regulamento Geral sobre a Proteção de Dados) na União Europeia são regulamentações que estabelecem diretrizes claras para proteger esses dados. Essas leis exigem que as empresas desenvolvam soluções que respeitem os direitos dos usuários.

Nesse artigo, iremos explorar como a LGPD e o GDPR podem ser aplicados no desenvolvimento de software, fornecendo um guia prático para ajudar os desenvolvedores a entender como criar soluções que atendam às exigências dessas leis.

O que é e por que importa

A Lei Geral de Proteção de Dados (LGPD) e o Regulamento Geral sobre a Proteção de Dados (GDPR) são regulamentações que estabelecem regras claras para proteger os dados dos usuários. A LGPD é uma lei brasileira que protege os dados pessoais dos cidadãos brasileiros, enquanto o GDPR é uma regulamentação da União Europeia que protege os dados pessoais dos cidadãos da UE.

Os principais conceitos aqui envolvidos são Privacidade de Dados, LGPD e GDPR. A privacidade de dados refere-se à capacidade de um indivíduo controlar como seus dados são coletados, armazenados e utilizados.

A LGPD e o GDPR são motivadas pela necessidade de proteger os dados pessoais dos usuários contra violações de segurança e uso não autorizado. As principais motivações para a implementação dessas leis são:

  • Proteger os direitos dos indivíduos sobre seus próprios dados;
  • Promover a responsabilidade das empresas que coletam e processam dados;
  • Prevenir violações de segurança e uso não autorizado de dados.

As leis LGPD e GDPR abordam problemas como:

  • Uso indevido de dados: quando as empresas usam os dados dos usuários para fins diferentes daqueles declarados, sem consentimento explícito.
  • Vias de segurança: quando as empresas não tomam medidas suficientes para proteger os dados dos usuários contra ataques cibernéticos ou roubo de dados.
  • Privacidade de dados: quando as empresas coletam e armazenam dados sem o consentimento explícito do usuário.

Em resumo, a LGPD e o GDPR são regulamentações que protegem os direitos dos usuários sobre seus dados pessoais. Eles estabelecem regras claras para as empresas que coletam e processam dados, visando prevenir violações de segurança e uso não autorizado de dados.

Como funciona na prática

A implementação das regras de privacidade de dados pode ser complexa, mas podemos desmembrá-la em etapas claras:

1. Identificação dos dados pessoais

  • As empresas devem identificar os dados pessoais coletados e armazenados.
  • Isso inclui informações como nome, email, telefone, endereço IP, etc.

2. Consentimento explícito

  • É necessário obter o consentimento explícito dos usuários antes de coletar ou processar seus dados pessoais.
  • O consentimento deve ser claro e conciso, informando ao usuário sobre a finalidade da coleta de dados.

3. Armazenamento seguro

  • As empresas devem tomar medidas para garantir que os dados pessoais sejam armazenados de forma segura.
  • Isso inclui a implementação de criptografia e autenticação robustas.

4. Acesso restrito

  • O acesso aos dados pessoais deve ser restrito apenas às pessoas necessárias para realizar as tarefas relacionadas ao processo.
  • É importante estabelecer políticas de segurança rígidas para evitar violações de acesso.

5. Proteção contra vazamento

  • As empresas devem implementar mecanismos de detecção e resposta a incidentes de vazamento de dados.
  • Isso inclui a notificação às autoridades e aos usuários afetados em caso de violação.

6. Auditoria periódica

  • É recomendável realizar auditorias periódicas para garantir que as políticas de privacidade estejam sendo cumpridas.
  • Isso inclui a verificação do consentimento dos usuários e da segurança dos dados armazenados.

Por fim, é importante lembrar que a implementação das regras de privacidade de dados é um processo contínuo. É fundamental manter-se atualizado sobre as mudanças nas leis e regulamentações e adaptar as políticas internas para garantir o cumprimento das normas estabelecidas pela LGPD e GDPR.

Exemplo real

Vamos analisar um exemplo de implementação das regras de privacidade de dados na prática.

Suponha que estamos desenvolvendo uma aplicação web de autenticação para os usuários do site meuservicos.com. Nossa aplicação armazena o nome e email dos usuários, necessários para a criação da conta e login. Para cumprir com as regras de privacidade de dados estabelecidas pela LGPD e GDPR, precisamos implementar medidas de segurança adequadas.

def verificar_consentimento(email):
    # Buscar no banco de dados se há um registro do usuário com o consentimento dado
    try:
        usuario = buscar_usuario(email)
        if usuario['consentimento']:
            return True  # O usuário já concedeu consentimento anteriormente
        else:
            return False  # Não foi encontrado o registro ou o usuário não concedeu consentimento
    except Exception as e:
        # Tratar a exceção, como retorno de erro para o desenvolvedor
        print(f'Erro ao verificar consentimento do usuário {email}: {str(e)}')

from cryptography.fernet import Fernet

def encrypt_dados(dados):
    # Geração da chave de criptografia
    chave = gera_chave()
    
    # Criptografar os dados do usuário (nome e email)
    encrypted_nome = criptografar(dados['nome'], chave)
    encrypted_email = criptografar(dados['email'], chave)

    return {'chave': chave, 'nome_criptografado': encrypted_nome, 'email_criptografado': encrypted_email}

def autenticar_usuario(email):
    # Buscar o usuário no banco de dados com a autenticação por token de acesso
    try:
        usuario = buscar_usuario(email)
        if usuario['token_acesso']:
            return True  # O usuário está logado e tem permissão para acessar os dados
        else:
            return False  # Não foi encontrado o registro do usuário ou não tem token de acesso válido
    except Exception as e:
        # Tratar a exceção, como retorno de erro para o desenvolvedor
        print(f'Erro ao autenticar usuário {email}: {str(e)}')

Essa implementação demonstra algumas das medidas que devem ser tomadas, como verificar se o usuário concedeu consentimento antes da coleta de dados, armazenamento seguro dos dados por meio da criptografia e autenticação robusta para garantir acesso restrito aos dados.

Boas práticas

Armazenamento de dados criptografados

  • Utilizar um gerador de chaves Fernet seguro, garantindo que a chave seja gerada fora do processo principal e armazenada em um local seguro.
  • Considerar o uso de um container para os dados criptografados, como por exemplo uma classe DataCriptografada, para centralizar as operações relacionadas à criptografia.

Verificação de consentimento

  • Verificar se o usuário concedeu consentimento antes da coleta e processamento dos dados. Isso pode ser feito com um campo booleano no banco de dados que indique se o usuário autorizou a coleta de seus dados.
  • Considerar adicionar uma notificação ao usuário antes de coletar seus dados, informando-o sobre as finalidades da coleta e como os dados serão utilizados.

Autenticação

  • Utilizar tokens de acesso para autenticar os usuários e restringir o acesso aos dados. Isso ajuda a evitar ataques de injeção de código e outros tipos de ataques.
  • Considerar adicionar uma política de expiração para os tokens de acesso, para garantir que eles sejam renovados regularmente.

Exceções tratadas

  • Tratar as exceções levantadas durante o processamento dos dados para evitar que elas sejam propagadas e causem erros no sistema.
  • Considerar adicionar um mecanismo de log para registrar as exceções e ajudar na resolução de problemas.

Armadilhas comuns

  • Risco de perda ou exposição da chave de criptografia, caso ela seja armazenada em um local não seguro. Resolvido implementando a geração de chaves fora do processo principal.
  • Não consideramos o trade-off entre segurança e desempenho para a criptografia dos dados, priorizando-se sempre a segurança.

Exceções não tratadas

  • A exceção pode ser propagada ao processo principal caso não seja tratada corretamente. Isso pode causar erros no sistema e necessitar de um restart do serviço.
  • Considerar adicionar um mecanismo de monitoramento para detectar a presença de exceções não tratadas e realizar correções antes que elas causem problemas no sistema.

Chaves geradas fora do processo principal

  • A chave é gerada por um processo externo ao nosso sistema, garantindo que ela seja segura e única.
  • O processo de geração da chave é seguro e não pode ser manipulado pelo usuário.

Conclusão

Em resumo, a implementação de medidas de compliance para proteger os dados dos usuários envolve considerações em várias áreas importantes. A utilização de tokens de acesso e políticas de expiração é essencial para evitar ataques de injeção de código e outros tipos de violações. Além disso, a tratativa das exceções levantadas durante o processamento dos dados e a implementação de mecanismos de log são cruciais para garantir a resiliência do sistema.

É importante considerar os riscos associados à perda ou exposição da chave de criptografia, priorizando sempre a segurança em detrimento do desempenho. Além disso, é fundamental implementar mecanismos de monitoramento para detectar e corrigir exceções não tratadas antes que elas causem problemas no sistema.

Por fim, a geração de chaves fora do processo principal é uma prática recomendada, pois garante a segurança e unicidade da chave. É fundamental abordar esses pontos em projetos futuros para garantir o cumprimento das regulamentações de proteção de dados e evitar possíveis penalidades legais.

Para prosseguir, recomenda-se investigar mais a fundo sobre as regulamentações LGPD e GDPR específicas às práticas de desenvolvimento aplicadas aqui.

Referências

  • Fowler, M. Patterns of Enterprise Application Architecture. Disponível em: https://martinfowler.com/articles/patterns-of-enterprise-apparch/. Acesso: 2024.
  • OWASP. Cryptography Cheatsheet. Disponível em: https://cheatsheetseries.owasp.org/cheatsheets/Cryptography_Cheat_Sheet.html. Acesso: 2024.
  • Thoughtworks. Confidentiality and data protection in software development. Disponível em: https://www.thoughtworks.com/insights/blog/confidentiality-and-data-protection-software-development. Acesso: 2024.
  • European Union. Regulation (EU) 2016/679 - General Data Protection Regulation. Disponível em: https://eur-lex.europa.eu/eli/reg/2016/679/oj. Acesso: 2024.
  • Federal Law No. 13,640/2018 (Brazil). Lei Geral de Proteção de Dados Pessoais (LGPD). Disponível em: https://www.planalto.gov.br/ccivil_03/_Ato2015-2018/2018/Leg/13640.htm. Acesso: 2024.
  • NIST. Special Publication 800-53 Revision 5. Disponível em: https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-53r5.pdf. Acesso: 2024.