Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Editando Objetos com Vraptor: isso é uma possível falha de segurança?

Ajudando um colega aqui no fórum, surgiu essa questão aqui : https://cursos.alura.com.br/forum/topico-bloquear-alteracao-na-data-de-cadastro-28725

No caso do amigo, quando ele estava na página de edição de um determinado registro, ele não mantinha o valor da data de cadastro do registro na página, e como ao submeter o form mandamos o objeto completo para o controller, a data de cadastro ia com valor null.

Foi sugerido para ele a solução mais obvia, criar um input hidden, com o valor da data do cadastro, obvio que essa solução funciona, pois o vraptor vai tratar de preencher a data de cadastro

<input type="hidden" name="registro.dataCadastro" value="${registro.dataCadastro}"/>

em minha opinião resolvemos um problema e criamos outro. Agora temos uma falha gravíssima de segurança. Pelo menos lá na empresa que eu trabalho, que é um tribunal, a data do cadastro de um processo por exemplo é algo muito importante, pois existem várias coisas ligadas à data do cadastro: prazos processuais, multas,etc.... logo a data de cadastro de algum registro, é algo que nunca deve mudar, mas como essa informação está em um simples hidden, qualquer criança pode ir lá pelo firebug mesmo e altarar esta data, ao submeter o form, o registro vai ser atualizado com uma outra data de cadastro. Se não me engano foi uma falha parecida com essa que certa vez derrubou o Git Hub. Parameter tampering?

oque eu sugeri para o colega foi passar normalmente o registro para o método editar, mas na verdade ele não vai editar este registro, ele vai recuperar um segundo registro pelo id passado e copiar todos os valores que vem do formulário de edição.

@Put
public void editar(Registro registro){

Registro registroToUpdate = registroDao.find(registro.getRegistroId);

registroToUpdate.setPropriedade(registro.getPropriedade());

registroToUpdate.setPropriedade2(registro.getPropriedade2());

registroDao.update(registroToUpdate);

}

Bem braçal, mas resolve. Gostaria de saber como vocês tratam esse tipo de situação, de atualizar somente os dados que possam ser atualizados visto que o padrão é enviar o objeto completo na requisição?

1 resposta
solução!

Opa, eu geralmente crio uma classe que representa o formulário. Nesse caso, criaria uma classe FormAtualizaRegistro com as informações. Depois copiaria, que nem vc fez :).

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software