Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • 0
RafaelTOF

Segurança e eficiência do Recaptcha

Pergunta

Boa noite amigos,

 

estava matutando aqui sobre a eficiencia do recaptcha em um sistema de login.

 

sou leigo no assunto, mas penso da seguinte forma.

 

ex:

O recaptcha é colocado na pagina "login.php", essa pagina contem o formulario que sera exibido para o usuario e chama a "verifica.php" para pegar os dados e consultar.

 

ai que entra minha duvida,

 

sabendo que o submit ira enviar os dados para a pagina "veriica.php", eu poderia criar um formulariozinho na minha maquina sem recaptcha e inserir dados a vida toda sem passar pelo recaptcha, somente colocando no meu submit "/endereçocompleto/verifica.php "... 

 

está certo isso ou tem mais algum mecanismo de defesa que eu não conheço?

 

neste caso o bloqueio por armazenamento de ip direto no "verifica.php" não seria muito mais eficiente do que o recaptcha?

 

para ser seguro, a verificação teria que ser feita na mesma pagina onde esta o recaptcha, teria que usar recaptcha junto a outro meio de defesa por armazenamento ou so recactcha é seguro e eu nãop entendi o seu funcionamento ou configuração?

 

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

0 respostas a esta questão

Recommended Posts

Até agora não há respostas para essa pergunta


  • Conteúdo Similar

    • Por merlinus
      tenho a seguinte situação, uma  pagina iniciar e gostaria de usar o recaptcha.
      mas tem duas formas que gostaria q ele validasse, uma indo pra pagina pra pagina de logar, a outra indo pro script esqueci a senha que enviaria o email para o usuario.
       
      inicialmente pensei em mudar o action com javascript para o outro destino.
      percebi q o qpi do google dá erro.
       
      alguem tem alguma ideia do q posso fazer?
    • Por marcelocardoso
      olá colegas.

      depois de tanto quebrar a cabeça com o RECAPTCHA do google, v3.
      não estou conseguindo resgatar o ID do INPUT hidden que guarda o TOKEN!!!!

      Segue código
      HTML
       
      <!DOCTYPE html> <html lang="pt_BR"> <head> <meta charset="utf-8"> <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> <meta content="ie=edge" http-equiv="X-UA-Compatible"> <title>Google Recaptcha - v3</title> <!-- STYLES CSS --> <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/inputmask@3.3.11/css/inputmask.min.css"> <!-- STYLES CSS --> <!-- SCRIPTS JS --> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-form@4.2.2/dist/jquery.form.min.js"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.1/dist/jquery.validate.min.js"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.1/dist/localization/messages_pt_BR.min.js"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.1/dist/additional-methods.min.js"></script> <!-- SCRIPTS JS --> <!-- SCRIPTS RECAPTCHA - SITE KEY --> <script src="https://www.google.com/recaptcha/api.js?render=6LesQewUAAAAAIWQKRKk19yob6G8hx3LEoYXybIC"></script> <!-- SCRIPTS RECAPTCHA - SITE KEY --> <style type="text/css"> *:focus { outline: none !important; } html, body { height: 100%; width: 100%; } body { color: darkgrey; margin: 60px 0px; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* google captcha - hidden na tela */ .grecaptcha-badge { display: none !important; } .valid-class { color: #006400; padding-left: 12px; padding-top: 3px; font-size: 15px; display: block; } .error-class { color: #e33d00; padding-left: 12px; padding-top: 3px; font-size: 15px; display: block; } .loading { position: fixed; left: 0px; top: 0px; margin: 0px; width: 100%; height: 100%; display: block; z-index: 999999; opacity: 0.92; -moz-opacity: 0.92; filter: alpha(opacity=98); background-color: #00224b; background-image: url("img/loading.gif"); background-repeat: no-repeat; background-position: 50% 50%; text-align: center; overflow: hidden; font-weight: bold; font-size: 25px; color: white; padding-top: 25%; } </style> </head> <body> <!-- code | formulario --> <section class="container-fluid"> <h1 class="text-center">RECAPTCHA</h1> <h4 class="text-center">GOOGLE v3</h4> <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12"> <form id="frm_form_contato" method="post" action="inc/google-form.asp"> <div class="form-group"> <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12 mb-2"> <label class="control-label" for="campo_nome">Nome</label> <input type="text" id="campo_nome" name="campo_nome" class="form-control" autocomplete="name" placeholder="Digite seu nome"> </div> <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12 mb-2"> <label class="control-label" for="campo_email">Email</label> <input type="text" id="campo_email" name="campo_email" class="form-control" autocomplete="email" placeholder="Digite seu e-mail"> </div> <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12 mb-2"> <label class="control-label" for="campo_mensagem">Mensagem</label> <textarea type="text" id="campo_mensagem" name="campo_mensagem" class="form-control" placeholder="Descreva sua mensagem"></textarea> </div> <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 mt-4"> <div id="contato_retorno"></div> <button id="btn-form" type="submit" class="btn btn-block btn-md btn-success">ENVIAR</button> </div> </div> <input type="hidden" id="token"> </form> </div> <div id="contato_carregando"></div> </section> <!-- code | formulario --> <!-- GOOGLE reCAPTCHA --> <script type="text/javascript"> "use strict"; //formulario de validacao $("#frm_form_contato").validate({ errorClass: "error-class", validClass: "valid-class", onkeyup: function (element) { this.element(element); }, onfocusout: function (element) { this.element(element); }, rules: { campo_nome: { required: true, minlength: 5, maxlength: 50 }, campo_email: { required: true, minlength: 5, email: true }, campo_mensagem: { required: true, minlength: 5, maxlength: 5000 } }, submitHandler: function (form) { grecaptcha.ready(function () { grecaptcha.execute('6LesQewUAAAAAIWQKRKk19yob6G8hx3LEoYXybIC', { action: 'homepage' }).then(function (token) { $("input#token").attr({ "value": "" + token + "" }); }); }); // A) resgatar variaveis (uma por uma) var form_url = $(this).attr("action"); var form_method = $(this).attr("method"); var form_token = $(this).find('input[name="token"]').val(); var form_nome = $(this).find('input[name="campo_nome"]').val(); var form_email = $(this).find('input[name="campo_email"]').val(); var form_telefone = $(this).find('input[name="campo_telefone"]').val(); var form_mensagem = $(this).find('input[name="campo_mensagem"]').val(); // B) resgatar variaveis (tudo de uma vez) // var form_data = $("#frm_form_contato").serializeArray(); var form_data = { 'campo_nome': $("#campo_nome").val(), 'campo_email': $("#campo_email").val(), 'campo_mensagem': $("#campo_mensagem").val(), 'campo_token': $("#token").val(), }; // ENVIAR FORM com POST // $("form").submit(function (e) { // e.preventDefault(); // var $form = $(this); // $.post($form.attr("action"), $form.serialize()).then(function () {}); // }); //ENVIAR FORM com AJAX $.ajax({ url: $("#frm_form_contato").attr("action"), type: $("#frm_form_contato").attr("method"), data: JSON.stringify(form_data), dataType: 'json', contentType: 'application/json; utf-8', //loading antes do sucesso e do envio beforeSend: function () { $("#btn-form").prop("disabled", false).text('Enviando ...').fadeIn(); $("#contato_carregando").html("<div class='loading'></div>").fadeIn(500); }, //se houver sucesso success: function (response) { setTimeout(function () { $("#contato_carregando").fadeOut(250); }, 3950); setTimeout(function () { $("#contato_retorno").html("<div class='valida_a_certo'>" + response + "</div>").fadeIn(500); }, 4000); setTimeout(function () { $("#contato_retorno").fadeOut(500); $("#btn-form").prop("disabled", false).text('Enviado'); $(form)[0].reset(); }, 10000); }, //se houver sucesso, finaliza complete: function (response) { $('body').fadeTo(4000, '1'); }, //se houver erro error: function (response) { setTimeout(function () { $("#contato_retorno").html("<div class='valida_a_erro'>" + response + "</div>").fadeIn(500); }, 4000); setTimeout(function () { $("#contato_retorno").fadeOut(500); $(form)[0].reset(); }, 10000); }, }); return false; } }); </script> <!-- SCRIPTS RODAPE --> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/js/bootstrap.min.js"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/inputmask@3.3.11/dist/jquery.inputmask.bundle.js"></script> <!-- SCRIPTS RODAPE --> </body> </html> BACKEND - ASP
      não estou conseguindo repassar o TOKEN para cá, já tentei de várias formas... 
      mas não consigo nem com REQUEST.QUERYSTRING, REQUEST e nem REQUEST.FORM.

       
      <% Response.LCID = 1033 'USA LCID IF Request.ServerVariables("SERVER_NAME") <> Request.ServerVariables("SERVER_NAME") THEN Response.Write "ACESSO RESTRITO!" ELSE G_TOKEN = Request.Form("campo_token") 'google token G_KEY_URL = "https://www.google.com/recaptcha/api/siteverify?secret=" 'google url G_KEY_SITE = "" 'google chave do site G_KEY_SECRET = "" 'google chave secreta IF Request.ServerVariables("REQUEST_METHOD") = "POST" THEN SET objXML = Server.CreateObject("MSXML2.ServerXMLHTTP") objXML.Open "GET", ""& G_KEY_URL & G_KEY_SECRET &"&response=" & G_TOKEN & "", false objXML.Send IF InStr(objXML.ResponseText, "TRUE") THEN campo_nome = Request.Form("campo_nome") campo_email = Request.Form("campo_email") campo_mensagem = Replace(Request.Form("campo_mensagem"), Chr(13), "<br>") cdoSERVER = "mail.teste.com.br" cdoORIGEM = "teste@teste.com.br" cdoPASS = "senha" cdoPORT = 587 cdoTIMEOUT = 120 cdoUSING = 2 cdoAUT = 1 cdoSSL = 0 cdoDE = campo_nome &" <"& campo_email &">" cdoPARA = "teste@teste.com.br" cdoASSUNTO = "teste - contato" cdoTEXT = "Envio de mensagem usando CDOSYS" SET objCDOSYSmail = Server.CreateObject("cdo.message") SET objCDOSYScon = Server.CreateObject("cdo.configuration") objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = cdoPORT objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoUSING objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoAUT objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = cdoTIMEOUT objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = cdoSSL objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = cdoSERVER objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = cdoORIGEM objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = cdoPASS objCDOSYScon.Fields.Update SET objCDOSYSmail.Configuration = objCDOSYScon objCDOSYSmail.From = cdoORIGEM objCDOSYSmail.To = cdoPARA objCDOSYSmail.Subject = cdoASSUNTO objCDOSYSmail.TextBody = cdoTEXT ON ERROR RESUME NEXT IF objCDOSYSmail.SEND = "" THEN Response.Write "Mensagem enviada com sucesso!" ELSE IF NOT ERR.NUMBER = "0" THEN Response.Write "Não foi possível enviar a mensagem!" Response.Write "OCORREU UM ERRO: " & Err.Number & " | " & Err.Description Err.Clear() END IF END IF ON ERROR GOTO 0 SET objCDOSYSmail = Nothing SET objCDOSYScon = Nothing ELSE Response.Write "recaptcha errado!" END IF SET objXML = Nothing END IF END IF %> Quem tiver tempo, e quiser dar uma olhada, só falta isso para finalizar o código, PASSAR o bendito parametro que não consigo do input para o ASP.
      No demais, agradeço.
      Até....
       
    • Por WAD - Soluções
      Olá, estou tentando utilizar este formulário de contato com o recaptcha, porém apresenta erro que não estou conseguindo resolver.
      ERRO: Por favor faça a verificação do captcha abaixo

      Link formulário: http://cartorio1bg.com.br/teste/andre/formulario-contato.php
      PHP INFO MEU SERVIDOR: http://cartorio1bg.com.br/teste/andre/info.php
      link: error_log : http://cartorio1bg.com.br/teste/andre/error_log
       
      Arquivos necessário: 
       
      PHPMailerAutoload.php – Responsável por carregar todas as dependências da classe PHPMailer class.phpmailer.php – A classe principal do PHPMailer class.smtp.php – A classe que vai permitir você fazer envios via SMTP
      Post original deste formulário: https://wiki.dialhost.com.br/formulario-de-contato-php-captcha/

      Código HTML – formulario-contato.php
      <?php include 'envia.php'; ?> <html> <head> <meta charset="utf8"> <title>Formulário de contato</title> <!-- Aqui adiciona o script do ReCaptcha --> <script src='https://www.google.com/recaptcha/api.js'></script> <link rel="stylesheet" href="style.css"> </head> <body> <div class="container"> <h1>Este é um teste de formulário de contato</h1> <form method="POST" action="formulario-contato.php"> <label>Digite seu nome: <input type="text" name="nome" value="" placeholder="ex: João" required> </label> <label>Digite seu e-mail: <input type="email" name="email" value="" placeholder="ex: joaoclb@gmail.com" required> </label> <label>Digite o assunto: <input type="text" name="assunto" value="" placeholder="ex: orçamento" required> </label> <label>Digite sua mensagem: <input type="text" name="msg" value="" placeholder="Digite sua mensagem aqui" required> </label> <!-- Div do ReCaptcha foi adicionado no final do formulário --> <div class="g-recaptcha" data-sitekey="|*SEU-SITE-KEY*|"></div> <input class="send" type="submit"> </form> </div> </body> </html>  
      Código PHP – envia.php
       
      <?php //Defino a Chave do meu site $secret_key = '|*SEU-SECRET-KEY*|'; //Pego a validação do Captcha feita pelo usuário $recaptcha_response = $_POST['g-recaptcha-response']; // Verifico se foi feita a postagem do Captcha if(isset($recaptcha_response)){ // Valido se a ação do usuário foi correta junto ao google $answer = json_decode( file_get_contents( 'https://www.google.com/recaptcha/api/siteverify?secret='.$secret_key. '&response='.$_POST['g-recaptcha-response'] ) ); // Se a ação do usuário foi correta executo o restante do meu formulário if($answer->success) { // Carrego a classe PHPMailer através do Autoload include "PHPMailerAutoload.php"; // Instancio a classe PHPMailer $msg = new PHPMailer(); // Faço todas as configurações de SMTP para o envio da mensagem $msg->CharSet = "UTF-8"; $msg->isSMTP(); $msg->Host = '|*SMTP.SEUDOMINIO.COM.BR*|'; $msg->SMTPAuth = true; $msg->Username = '|*SEU-EMAIL@SEUDOMINIO.COM.BR*|'; $msg->Password = '|*SUA-SENHA*|'; $msg->Port = 587; $msg->SMTPAutoTLS = false; $msg->AuthType = 'PLAIN'; //Defino o remetente da mensagem $msg->setFrom('|*SEU-EMAIL@SEUDOMINIO.COM.BR*|','|*NOME-DO-SEUEMAIL*|'); // Defino a quem esta mensagem será respondida, no caso, para o e-mail // que foi cadastrado no formulário $msg->addReplyTo($_POST['email'], $_POST['nome']); // Defino a mensagem como mensagem de texto (Ou seja não terá formatação HTML) $msg->IsHTML(false); // Adiciono o destinatário desta mensagem, no caso, //minha conta de contatos comerciais. $msg->AddAddress('|*SEU-EMAIL@SEUDOMINIO.COM.BR*|', '|*NOME-DO-SEUEMAIL*|'); // Defino o assunto que foi digitado no formulário $msg->Subject = $_POST['assunto']; // Defino a mensagem que foi digitada no formulário $msg->Body = $_POST['msg']; // Defino a mensagem alternativa que foi digitada no formulário. // Esta mensagem é utilizada para validações AntiSPAM e por isto // é muito recomendado que utilize-a $msg->AltBody = $_POST['msg']; // Faço o envio da mensagem $enviado = $msg->Send(); // Limpo todos os registros de destinatários e arquivos $msg->ClearAllRecipients(); // Caso a mensagem seja enviada com sucesso ela retornará sucesso // senão, ela retornará o erro ocorrido if ($enviado){ echo "E-mail enviado com sucesso!"; } else { echo "Não foi possível enviar o e-mail."; echo "<b>Informações do erro:</b> " . $msg->ErrorInfo; } } // Caso o Captcha não tenha sido validado //retorno uma mensagem de erro. else { echo "Por favor faça a verificação do captcha abaixo"; } }  
    • Por alexandre99
      Boa noite pessoal,
      Estou com um problema aqui, inclui 2 recaptchas em minha página e eles estão funcionando corretamente, porém na hora de limpar eles (após dar o submit através do ajax) não consigo resetar o recaptcha, se eu uso o "grecaptcha.reset" ele limpa somente um recaptcha..
      Obrigado!
    • Por carolkojima
      Pessoal, preciso de uma ajuda, no caso tenho dois formulários em meu site.
      Em um deles eu coloquei o recaptcha do Google, até ai blz.
      Mas se eu coloco o mesmo no outro formulário, eu não consigo.
      Tem como usar dois na mesma pagina?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.