vRaptor - Problema ao enviar URL criptografada [RESOLVIDO]

8 respostas
tefo

Eai galera…

estou enviando por um metodo GET a seguinte URL:

esse trecho criptografado eh o ID do usuario ao qual desejo editar… criptografei para que nao mostrasse o verdadeiro ID e que o usuario do site nao pudesse altera-lo e editar outro usuario…
mas acontece que por definiçoes do HTTP o meu ID criptografado contem % que faz com que aconteça o erro 400 bad request (acredito que seja por isso)
e quando eu removo os % ai sim a URL eh enviada ao metodo no java onde descriptografaria o ID…

minha duvida eh se tem como concertar esse problema com o %,
OU
se existe outro jeito de eu chamar o form de ediçao de usuario de forma que o usuario do site nao consiga alterar o ID e consequentemente nao acabe alterando outro cadastro de usuario??

8 Respostas

tefo

detalhe: estou usando vRaptor

Rendrys

Ué… se o “editarUsuario” só eh possivel pro proprio usuario, pq nao pega o ID pelo usuario logado?
No caso de ter um modo “usuario comum” e “usuario admin” (em que este ultimo pode alterar de outros), vc pode verificar o perfil do kra, se ele for “comum”, vc bate o ID da URL com o do usuario logado novamente.
Até mesmo pq mesmo q funcionasse isso q vc ta fazendo, a pessoa ainda assim poderia ficar alterando esses valores criptografados até acertar algum registro do banco.

Lucas_Cavalcanti

se vc quer fazer isso num formulário, pode colocar o id normal na url, mas no form colocar um input hidden com esse hash que vc gerou.

daí no servidor vc valida se o hash tá de acordo com o id.

o ideal é fazer um hash do id com o timestamp e não aceitar um timestamp muito antigo… talvez incluir mais dados no hash, como o login ou email do cara.

e o hash pode ser um MD5 ou SHA256 da vida, é bem fácil gerar isso em java…

mas coloque no formulário, e não na url.

tefo

eai gente,
obrigado pela ajuda Rendrys, mas a ideia do Lucas tem mais haver com o meu projeto…

o hash que decidi usar eh o AES-256 que pelo que li eh muuuuuito mais dificil de ser quebrado…

Metodo:@Restrito @Get @Path("/{idCripto}/editarUsuario") public Usuario editar(String idCripto) { Long id = null; try{ id = Long.parseLong(DecryptData.decryptData(idCripto, CreateAndSaveAESKey.AES_SECRET_KEY_FOR_ID)); }catch (NoSuchAlgorithmException noSuchAlgo) { System.out.println(" Nao existe tal algoritmo: " + noSuchAlgo.getMessage()); }catch (NoSuchPaddingException noSuchPad) { System.out.println(" Nao foi preenchido: " + noSuchPad.getMessage()); }catch (InvalidKeyException invalidKey) { System.out.println(" Codigo invalido: " + invalidKey.getMessage()); }catch (BadPaddingException badPadding) { System.out.println(" Preenchido errado: " + badPadding.getMessage()); }catch (IllegalBlockSizeException illegalBlockSize) { System.out.println(" Tamanho do bloco ilegal: " + illegalBlockSize.getMessage()); }catch (InvalidAlgorithmParameterException invalidParam) { System.out.println(" Parametro invalido: " + invalidParam.getMessage()); }catch (Exception e) { System.out.println(" Erro: " + e.getMessage()); } return usuDao.consultar(id); }
AINDA VOU MUDA-LO E PASSAR O PROPRIO ID!
Bem, o metodo java daquela URL recebe o valor que esta nela mesma.
Minha duvida eh: se eu setar o hash num input hidden, como faço para receber o hash se ele nao eh passado na URL?

Lucas_Cavalcanti

se o input é:

<input type="hidden" name="secret" value="seu hash maroto aqui" />

só receber um parâmetro secret:

@Path("/{id}/editarUsuario")  
public Usuario editar(String id, String secret) { ... }
tefo

header.jspf

//DESCULPEM POR NAO CONSEGUIR COLOCAR DE UM JEITO MAIS LEGIVEL, MAS EH PQ O NAVEGADOR INTERPRETA A TAG <a> E NAO MOSTRAVA CERTO.. SEGUE ABAIXO
   "&lt;input type="hidden" name="idCripto" value="${usuarioWeb.id}"/&gt;"
   "<a ></a>"
//esta dentro do <a> acima
   "href="/${usuarioWeb.login}/editarUsuario""

metodo java@Restrito @Get @Path("/{login}/editarUsuario") public Usuario editar(String login, String idCripto) {
o parametro login eh o nome de usuario da pessoa logada…

eu entendi para fazer assim, mas da erro 500

tefo

consegui!

gerando a URL na tag assim:<a href="<c:url value="/${usuarioWeb.login}/editarUsuario?idCripto=${usuarioWeb.id}"/>">Dados de Login</a>funciona!

assim, pelo menos, nao preciso criar um form… :slight_smile:

Lucas_Cavalcanti

qual erro estava dando?

Criado 3 de agosto de 2012
Ultima resposta 3 de ago. de 2012
Respostas 8
Participantes 3