Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on • Edited on

Capítulo 12: Serialização - Item 85: Prefira alternativas à serialização Java

A Serialização ainda é usada hoje, mas com muita cautela. Ela foi amplamente utilizada no passado para persistência de objetos e comunicação entre sistemas, mas devido a diversos problemas de segurança e eficiência, seu uso tem diminuído.

Atualmente, frameworks modernos e tecnologias como JSON, XML, Protobuf e Avro são preferidos para troca de dados, pois são mais seguros, interoperáveis e eficientes. No entanto, a serialização Java ainda pode ser encontrada em sistemas legados e em aplicações que precisam de compatibilidade com tecnologias antigas.

Se for realmente necessário usar serialização, recomenda-se adotar boas práticas de segurança, como filtragem de objetos e evitar desserialização de fontes não confiáveis.

Atenção: Com as evoluções do Java e práticas modernas, existem alternativas mais seguras e eficientes para lidar com serialização/desserialização. Mas como estamos estudando o livro vamos considerar para aprender. VER NO TÓPICO FINAL SOBRE SERIALIZAÇÃO

Item 85: Prefira alternativas à serialização Java

O que é Serialização?

  • Processo de transformar um objeto em uma sequência de bytes para armazenamento ou transmissão.
  • Desserialização é o processo inverso, reconstruindo o objeto a partir dos bytes serializados.
  • Utiliza a interface Serializable no Java.

Problemas da Serialização Java

1. Superfície de Ataque Grande

  • O método readObject atua como um "construtor mágico", podendo instanciar objetos inesperados.
  • Qualquer classe que implemente Serializable pode ser um ponto de exploração.

2. Vulnerabilidades de Segurança

  • Possibilidade de execução remota de código (RCE) ao desserializar objetos de origem desconhecida.
  • Uso de gadgets (métodos chamados automaticamente durante a desserialização) para criar cadeias de ataque.

3. Bombas de Desserialização

  • Objetos que exigem grande poder computacional para serem desserializados.
  • Exemplo: HashSet profundamente aninhado.

Exemplo de bomba de desserialização:

import java.io.*;import java.util.HashSet;public class DeserializationBomb {    public static void main(String[] args) throws Exception {        HashSet<Object> root = new HashSet<>();        HashSet<Object> s1 = root;        HashSet<Object> s2;        for (int i = 0; i < 100; i++) {            s2 = new HashSet<>();            s1.add(s2);            s1 = s2;        }        try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("bomb.ser"))) {            out.writeObject(root);        }    }}
Enter fullscreen modeExit fullscreen mode

Alternativas à Serialização Java
JSON

  • Leve, legível e amplamente suportado.Exemplo com Gson:
import com.google.gson.Gson;class Pessoa {    String nome;    int idade;}public class JsonExample {    public static void main(String[] args) {        Gson gson = new Gson();        Pessoa pessoa = new Pessoa();        pessoa.nome = "João";        pessoa.idade = 30;        String json = gson.toJson(pessoa);        System.out.println(json);    }}
Enter fullscreen modeExit fullscreen mode

Protocol Buffers (Protobuf)

  • Binário e eficiente.
  • Necessita da definição de esquemas .proto.

Como Mitigar Riscos se a Serialização for Necessária

  • Evite Desserialização de Dados Não Confiáveis
  • Use Filtragem de Objetos (ObjectInputFilter desde Java 9)
ObjectInputFilter filter = info -> {    if (info.serialClass() != null && info.serialClass().getName().equals("MinhaClasseSegura")) {        return ObjectInputFilter.Status.ALLOWED;    }    return ObjectInputFilter.Status.REJECTED;};ObjectInputStream ois = new ObjectInputStream(new FileInputStream("objeto.ser"));ois.setObjectInputFilter(filter);Object obj = ois.readObject();
Enter fullscreen modeExit fullscreen mode

Utilize Lista Branca em vez de Lista Negra

  • Permita apenas classes explícitas na desserialização.

Conclusão

  • Evite ao máximo a Serialização Java em sistemas novos.
  • Prefira formatos mais seguros e eficientes como JSON, Protobuf e Jackson.
  • Se precisar desserializar objetos, use filtragem rigorosa para evitar ataques.

Exemplo do livro:

Image description

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

Resumos do Livro Java Efetivo feitos pro grupo de estudos Clube do Livro na comunidade de Java Girls Jug.
  • Location
    Florianópolis
  • Education
    Streets
  • Work
    Cibercafé
  • Joined

More fromJava Efetivo (livro)

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp