bigueee 0 Denunciar post Postado Janeiro 11, 2012 Bom dia, tenho uma aplicação web e ao carregar cada página crio um campo hidden no formulário com um token para validação na hora do POST, onde a função que gera esse valor salva o mesmo em SESSION para a futura validação. Me ocorreu a seguinte situação: O usuário abre a TELA 1 e percebe que precisa fazer antes uma operação na TELA 2, então ele abre em uma nova aba, o que gera um novo token e salva na SESSION. Ele realiza a operação na TELA 2 com sucesso e fecha a aba, retornando para a TELA 1 que já estava carregada. Ao realizar alguma operação a validação do token falha pois a SESSION já não está mais com o valor de quando foi gerada a token na TELA 1. De que maneira posso evitar/corrigir essa situação? Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Janeiro 11, 2012 que tal o token só ser geraado se não existir nada na session ? ai, assim que o usuário terminasse a ação, você zeraria a session, e permitiria criar outro token. Entendeu ? Compartilhar este post Link para o post Compartilhar em outros sites
bigueee 0 Denunciar post Postado Janeiro 11, 2012 Entendi, mais nesse caso, se eu termino a ação e zero a SESSION, não fecho a aba e vou tentar fazer outra coisa na mesma tela, vai dar o erro de validação pq a SESSION vai estar zerada. Ou estou errado? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Janeiro 11, 2012 se você terminou a ação, então qndo for tentar fazer outra coisa, o token vai ter q ser gerado novamente. Compartilhar este post Link para o post Compartilhar em outros sites
bigueee 0 Denunciar post Postado Janeiro 11, 2012 No meu caso eu estou gerando o token quando a página é aberta, dentro da página existem diversas ações que validam o token, que podem ser chamadas sem a necessidade de recarregar a página. Se eu zerar a session na execução da primeira ação, na segunda a session vai estar zerada e como o token não é gerado na hora da solicitação e sim no carregamento inicial não vai validar. Eu deveria gerar um token quando ele solicitasse algo? Está errado gerar um no carregamento inicial da página? --- Vou postar a maneira que imaginei fazer: FUNÇÃO QUE GERA O TOKEN: Chamada quando o usuário abre cada página. function create_session_token($session) { $CI =& get_instance(); $sess = md5(uniqid(mt_rand(), TRUE)); $token = md5(uniqid(mt_rand(), TRUE)); $CI->session->set_userdata($sess, $token); return ($session) ? $sess : $token; } FUNÇÃO QUE VALIDA O TOKEN: Chamando a função: valid_token($_POST['sess'], $_POST['token']); function valid_token($sess, $token) { $CI =& get_instance(); return ($token == $CI->session->userdata($sess) ? true : false; } INPUTS NOS FORMS: <input type="text" name="sess" id="sess" value="<?php echo create_session_token(true) ?>"/> <input type="text" name="token" id="token" value="<?php echo create_session_token(false) ?>"/> AJAX QUE ENVIA AS AÇÕES $.ajax({ (...) type : 'post', dataType : 'json', url : options.url, data : $.extend(options.data, { token : $('#token').val(), sess : $('#sess').val() }), (...) }); --- Estou viajando? Dessa forma protege contra possíveis ataques?? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Janeiro 11, 2012 Se eu zerar a session na execução da primeira ação zere qndo ele acabar todas as ações. token não é gerado na hora da solicitação então vale a pena gerar na solicitação tb. Eu deveria gerar um token quando ele solicitasse algo? Está errado gerar um no carregamento inicial da página? depende do escopo da sua aplicação. Dessa forma protege contra possíveis ataques?? não protege muito não. Compartilhar este post Link para o post Compartilhar em outros sites