Advertisement
Guest User

Untitled

a guest
Nov 6th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.38 KB | None | 0 0
  1. <script src='https://www.google.com/recaptcha/api.js'></script>
  2.  
  3. <div class="g-recaptcha" data-sitekey="SUA-CHAVE"></div>
  4.  
  5. if (isset($_POST['nome'])) {
  6. $nome = $_POST['nome'];
  7. }
  8.  
  9. if (isset($_POST['mensagem'])) {
  10. $mensagem = $_POST['mensagem'];
  11. }
  12.  
  13. if (isset($_POST['g-recaptcha-response'])) {
  14. $captcha_data = $_POST['g-recaptcha-response'];
  15. }
  16.  
  17. // Se nenhum valor foi recebido, o usuário não realizou o captcha
  18. if (!$captcha_data) {
  19. echo "Por favor, confirme o captcha.";
  20. exit;
  21. }
  22.  
  23. $resposta = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SUA-CHAVE-SECRETA&response=".$captcha_data."&remoteip=".$_SERVER['REMOTE_ADDR']);
  24.  
  25. if ($resposta.success) {
  26. echo "Obrigado por deixar sua mensagem!";
  27. } else {
  28. echo "Usuário mal intencionado detectado. A mensagem não foi enviada.";
  29. exit;
  30. }
  31.  
  32. if (grecaptcha.getResponse() == "")
  33. {
  34. alert("Você não clicou no reCAPTCHA, por favor, faça!")
  35. return false;
  36. }
  37.  
  38. ini_set('allow_url_fopen', 1)
  39.  
  40. # Os parâmetros podem ficar em um array
  41. $vetParametros = array (
  42. "secret" => "SUA-CHAVE-SECRETA",
  43. "response" => $_POST["g-recaptcha-response"],
  44. "remoteip" => $_SERVER["REMOTE_ADDR"]
  45. );
  46. # Abre a conexão e informa os parâmetros: URL, método POST, parâmetros e retorno numa string
  47. $curlReCaptcha = curl_init();
  48. curl_setopt($curlReCaptcha, CURLOPT_URL,"https://www.google.com/recaptcha/api/siteverify");
  49. curl_setopt($curlReCaptcha, CURLOPT_POST, true);
  50. curl_setopt($curlReCaptcha, CURLOPT_POSTFIELDS, http_build_query($vetParametros));
  51. curl_setopt($curlReCaptcha, CURLOPT_RETURNTRANSFER, true);
  52. # A resposta é um objeto json em uma string, então só decodificar em um array (true no 2º parâmetro)
  53. $vetResposta = json_decode(curl_exec($curlReCaptcha), true);
  54. # Fecha a conexão
  55. curl_close($curlReCaptcha);
  56. # Analisa o resultado (no caso de erro, pode informar os códigos)
  57. if ($vetResposta["success"]) echo "<p>Captcha OK!</p>n";
  58. else
  59. {
  60. echo "$<p>Problemas:</p>n";
  61. foreach ($vetResposta["error-codes"] as $strErro) echo "$strTab<p>Erro: $strErro</p>n";
  62. }
  63.  
  64. $recaptcha = new ReCaptchaReCaptcha($secret, new ReCaptchaRequestMethodCurlPost());
  65. $resp = $recaptcha->verify($gRecaptchaResponse, $remoteIp);
  66. if ($resp->isSuccess()) {
  67. // verified!
  68. } else {
  69. $errors = $resp->getErrorCodes();
  70. }
  71.  
  72. <?php ini_set('display_errors',1); ini_set('display_startup_erros',1); error_reporting(E_ALL); ?><!--Força o php a mostrar todo tipo de erro, linha temporária-->
  73. <?php
  74. function __autoload($class_name){
  75. require_once '../_lib/'.$class_name.'.php';//-->lê minhas classes de forma automática
  76. }
  77. ?>
  78. <!DOCTYPE html>
  79. <html>
  80. <head>
  81. <link rel="stylesheet" type="text/css" href="_css/login.css"/>
  82. <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  83. <script src='https://www.google.com/recaptcha/api.js'></script>
  84. <script>
  85. $(document).ready(function() {
  86. $('#send').prop('disabled', true);//desativa o botão enviar
  87. $('.g-recaptcha').hide();//esconde o captcha
  88. validate();
  89. $('#inputEmail, #inputPassword').change(validate);
  90. });
  91. function validate() {
  92. if ($('#inputEmail').val().length > 10) {//enquanto o campo de email nao tiver menos que 10 caracteres, não ativa o reCaptcha
  93. $('.g-recaptcha').show();//exibe o reCaptcha
  94. }else{//se mudar de ideia e reduzir o campo pra menos de 10 caracteres...
  95. $('.g-recaptcha').hide();//o reCaptcha se esconde novmanete
  96. }
  97. }
  98. function enableSend() {
  99. $('#send').prop('disabled', false);//quando o captcha é confirmado, ativa o botao enviar
  100. }
  101. </script>
  102. </head>
  103.  
  104. <body>
  105. <?php
  106. $helper = new Helpers();//-->objeto com vários métodos importantes
  107. if (isset($_POST['attempt'])){//verifica se tem tentativa restante
  108. $attempt = intval($helper->validation($_POST['attempt']));//validation=método que verifica e escapa minha sring (trim(), stripcslashes() e htmlspecialchars())
  109. }else{
  110. $attempt = 3;//se não for definido número de tentativas, aqui é definido como 3
  111. }
  112.  
  113. if (isset($_POST['g-recaptcha-response']) and isset($_POST['username']) and isset($_POST['password'])) {//garante que todos os campos foram preenchidos
  114. $captcha_data = $_POST['g-recaptcha-response'];
  115. if ($captcha_data) {//Verificação do reCaptcha
  116. $resposta = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=DIGITE-SUA-CHAVE-SECRETA-GERADA-PELO-GOOGLE-AQUI=" . $captcha_data . "&remoteip=" . $_SERVER['REMOTE_ADDR']);
  117. if ($resposta) {//validação do reCaptcha
  118. $username = strtolower($helper->validation($_POST['username']));
  119. $password = $helper->validation($_POST['password']);
  120. $user = new User();//--->meu objeto que acessa o banco de dados usando PDO
  121. $userValidated = $user->checkPasswordHash($username);//--->método do meu objeto que procura o usuario no bacno de dados (SELECT * FROM tbl_Users WHERE username = $username)
  122. if ($userValidated){//verifica se o email existe, se existir...
  123. if ($userValidated->status == 1){//verifica se a conta está bloqueada ou não
  124. echo 'Essa conta está bloqueada, criar botão para reenviar o email de recuperação...';
  125. }else{
  126. $hash = $userValidated->password;//retorna o hash do password
  127. if (password_verify($password, $hash)) {//compara a senha e o hash que foi criado usando password_hash() e salvo no banco de dados
  128. echo 'Password é válido, inserir código que inicia as sessões e chama a próxima página';//-->insira seu código
  129. } else {//caso o password estjeja errado, perde uma tentativa
  130. if ($attempt != 1){//se a tentativa restante for igual a 1, a proxima vez será direcionado para a página de recuperação de senha
  131. $attempt--;
  132. echo 'Usuário e senha não combinam, você tem mais '.$attempt.' tentativas';//mostra o número de tentativas restante
  133. }else{//bloqueia a conta e chama a página de recuperação de senha
  134. echo 'inserir código que bloqueia a conta e abre pagina de recuperaçao de senha';//-->insira seu código de bloqueio
  135. }
  136. }
  137. }
  138. }else{//se o email não existir, perde uma tentativa mas não avisa se o erro foi no email ou na senha
  139. if ($attempt != 0){
  140. $attempt--;
  141. echo 'Usuário e senha não combinam, você tem mais '.$attempt.' tentativas';//mostra o número de tentativas restante
  142. }else{//bloqueia a conta e chama a página de recuperação de senha
  143. echo 'inserir código que bloqueia a conta e abre pagina de recuperaçao de senha';//-->insira seu código de bloqueio
  144. }
  145. }
  146. } else {
  147. echo "Validação não concluída, tente novamente.";
  148. exit;
  149. }
  150. } else {
  151. echo "Validação não concluída, tente novamente.";
  152. exit;
  153. }
  154. }
  155. ?>
  156. <section>
  157. <form class="login" action="login.php" method="post">
  158. <fieldset>
  159. <legend>Login</legend>
  160. <label for="inputEmail" class="Label">Email: </label>
  161. <input id="inputEmail" class="inputText" type="email" maxlength="30" name="username" required>
  162. <label for="inputPassword" class="Label">Password: </label>
  163. <input id="inputPassword" class="inputPassword" type="password" maxlength="20" name="password" required>
  164. <div class="g-recaptcha" data-sitekey="DIGITE-A-CHAVE-DO-SEU-SITE-CRIADA-PELO-GOOGLE-AQUI" data-callback="enableSend"></div><!--Linha que adiciona o recaptcha-->
  165. <input type="hidden" name="attempt" value=<?php echo $attempt ?> /><!--envia por post o numero de tentativas restante-->
  166. <input type="submit" value="Confirmar" id="send" class="send">
  167. </fieldset>
  168. </form>
  169. </section>
  170.  
  171. </body>
  172. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement