PageRenderTime 80ms CodeModel.GetById 34ms RepoModel.GetById 0ms app.codeStats 0ms

/create_cookie.php

https://github.com/mayconbordin/CookieHMAC-Example
PHP | 62 lines | 32 code | 12 blank | 18 comment | 0 complexity | 8c541457c3bfc593da753a885b7d56c4 MD5 | raw file
  1. <?php
  2. //Inclui as bibliotecas necessárias
  3. require ('./lib/Browser/Browser.php');
  4. require ('./lib/Ip.php');
  5. //Instancia o objeto para obter os dados do navegador
  6. $browser = new Browser();
  7. //Cria uma hash com a challenge do usuário
  8. //Poderia ser ainda a senha do usuário. Neste caso a challenge é uma chave criada
  9. //através do sistema de login CHAP.
  10. //http://en.wikipedia.org/wiki/Challenge-handshake_authentication_protocol
  11. $userChallenge = hash('sha256', "User challenge hash");
  12. //Nome do usuário
  13. $userName = 'admin';
  14. //Gera a chave que será usada para gerar a assinatura do usuário
  15. $key = $browser->getBrowser().
  16. $browser->getVersion().
  17. $browser->getUserAgent().
  18. $browser->getPlatform().
  19. Ip::getIp();
  20. //Transforma a chave em hash
  21. //Essa chave precisa ser guardada em associação com o usuário para posterior
  22. //verificação de autenticidade
  23. $key = hash('sha256', $key);
  24. //Une os dados do usuário
  25. $data = $userChallenge . $userName;
  26. //Cria a assinatura do usuário que servirá para autenticação
  27. $signature = hash_hmac("sha256", $data, $key);
  28. //Serializa os dados do cookie
  29. $cookie = serialize(array($userName, $signature));
  30. //Codifica o cookie
  31. $cookie = base64_encode($cookie);
  32. //Armazena o cookie
  33. setcookie('remember_me', $cookie, time()+3600);
  34. //=============================================
  35. //Impressão dos dados
  36. ?>
  37. <table border="1">
  38. <tr>
  39. <td>Mensagem:</td>
  40. <td><?= $data ?></td>
  41. </tr>
  42. <tr>
  43. <td>Chave:</td>
  44. <td><?= $key ?></td>
  45. </tr>
  46. <tr>
  47. <td>Assinatura:</td>
  48. <td><?= $signature ?></td>
  49. </tr>
  50. </table>