Teclado Virtual Com PHP E MySQL

Últimamente na Internet virou moda garotos de 14, 15 anos entrarem nas contas ou sistemas de outras pessoas a fim de provar que sabem algo.

Este é apenas um dos problemas que pequenas, médias e grandes empresas enfrentam no dia a dia.

Para evitar problemas, nós desenvolvedores trabalhamos dia e noite a fim de criar soluções que venham aumentar a segurança nos sistemas disponíveis na Internet.

Na matéria de hoje, vamos apresentar um Teclado Virtual.

Ele é simples, porém, em alguns casos torna-se eficaz, aumentando as chances de identificação em combate de programas maliciosos em execução no equipamento.

Por exemplo:

  • Janelas falsas do tipo pop up, que aparecem na frente de seu navegador no momento em que você acessa o Teclado Virtual do Real Internet Banking ou do Real Internet Empresa e solicitam os dados de acesso a sua conta;
  • páginas falsas contendo imagens e frases relacionadas ao BANCO REAL;
  • programas que monitoram suas ações no computador, conhecidos como key-loggers e mouseloggers, que copiam e gravam tudo que é digitado ou clicado com o mouse;
  • ataques realizados por fraudadores ou programas maliciosos que redirecionam a navegação para páginas falsas.

Como de costume, em anexo disponibilizamos o sistema completo.

Configurando A Base de Dados MySQL

Antes de tudo, é necessário configurar a base de dados.

Com o BD já criado, acesse o ficheiro “conexao.php” e configure o ficheiro alterando as informações de acesso à base de dados (conforme script a seguir).



<?

// SERVIDOR

$database = "SERVIDOR";
$dbname   = "BASEDEDADOS";
$usuario  = "USUARIO";
$dbsenha  = "SENHA";

$conexao=mysql_connect ($database, $usuario, $dbsenha);

if($conexao){
      if (mysql_select_db($dbname, $conexao)){
           print "";
      }else{
           print "Não foi possível selecionar o Banco de Dados";
           }
      }else{
           print "Erro ao conectar o MySQL";
           }
          
?>

Após a configuração, vamos agora criar a tabela que será usada!

Criando A Tabela Na Base De Dados MySQL

Para configurar a base de dados através do script, abra o ficheiro script-sql.txt (disponível em anexo) e cole seu conteúdo no Programa utilizado para gerenciamento da base de dados.

Em nossas matérias utilizamos como padrão o MySQLFront. Caso tu também esteja utilizando este programa, clique em SQL Editor e cole o conteúdo do script (conforme disponibilizado a seguir).



----- INSTALANDO A TABELA -----

CREATE TABLE `tbl_usuarios` (
  `usuarios_id` int(11) NOT NULL auto_increment,
  `usuarios_nome` varchar(255) default NULL,
  `usuarios_password` varchar(25) default NULL,
  `usuarios_email` varchar(80) default NULL,
  `status` char(1) default NULL,
  PRIMARY KEY  (`usuarios_id`)
);

INSERT INTO `tbl_usuarios` (`usuarios_id`,`usuarios_nome`,`usuarios_password`,`usuarios_email`,`status`) VALUES (3,'Administrador','123456','teste@teste.com','1');

Após importar os dados, você já poderá fazer uso do sistema abaixo.

Explorando O Ficheiro index.php

Conforme dissemos anteriormente, este sistema é muito prático de implementar.

Abaixo disponibilizamos o código da página “index.php”, onde são apresentadas as perguntas e respostas (conforme script e imagem a seguir):



<? include('includes/conexao.php'); ?>
<html>
<head>
<title>.:: Administração ::.</title>

<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">

<STYLE type=text/css>.style7 {
  FONT-SIZE: 10px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
.style8 {
  FONT-SIZE: 12px
}
.style10 {
  FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}

</STYLE>
<LINK href="scripts/css/css.css" type=text/css rel=stylesheet>

<link href="scripts/css/keyboardstyle.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="scripts/js/jquery-1.2.6.min.js"></script>
<script type="text/javascript" src="scripts/js/jquery-ui-personalized-1.5.2.min.js"></script>
<script type="text/javascript" src="scripts/js/jquery-fieldselection.js"></script>
<script type="text/javascript" src="scripts/js/vkeyboard.js"></script>

<STYLE type=text/css>BODY {

  MARGIN: 0px

}

</STYLE>

<META content="MSHTML 6.00.2800.1561" name=GENERATOR></HEAD>

<BODY>

<P align=center>&nbsp;</P>

<TABLE cellSpacing=0 cellPadding=0 width=600 align=center border=0>

  <TBODY>

  <TR>

    <TD><A href="autenticacao.php"><IMG

      src="imagens/topo_login.jpg" border=0></A></TD></TR>

  <TR>

    <TD background=imagens/fundo_login.jpg>

      <P>&nbsp;</P>

      <TABLE cellSpacing=0 cellPadding=0 width=500 align=center border=0>

        <TBODY>

        <TR>

          <TD width=330 background=imagens/login2_r1_c1.jpg

          height=150 rowSpan=3>

            <FORM action='includes/autenticacao.rotinas.php' method=post><BR>

            <TABLE cellSpacing=0 cellPadding=0 width=225 align=right border=0>

              <TBODY>

              <TR>

                <TD width=57 height=25>

                  <DIV align=right><SPAN class=style10>Login:</SPAN></DIV></TD>

                <TD width=173 height=25>

                    <INPUT class=botoes size=20 name='username'>

                  </TD></TR>

              <TR>

                <TD height=25>

                  <DIV align=right><SPAN class=style10>Senha:</SPAN></DIV></TD>

                <TD height=25>

                    <INPUT class=botoes id=pwd type=password size=20 name='pwd'><br><a href="#" id="showkeyboard" title="Type in your password using a virtual keyboard."><SPAN class=style10>teclado virtual</span></a>

                  </TD></TR>
                  
                  
                  
                  
                  
<div id="keyboard">
  <div id="row0">
    <input name="accent" type="button" value="`" />
    <input name="1" type="button" value="1" />
    <input name="2" type="button" value="2" />
    <input name="3" type="button" value="3" />
    <input name="4" type="button" value="4" />
    <input name="5" type="button" value="5" />
    <input name="6" type="button" value="6" />
    <input name="7" type="button" value="7" />
    <input name="8" type="button" value="8" />
    <input name="9" type="button" value="9" />
    <input name="0" type="button" value="0" />
    <input name="-" type="button" value="-" />
    <input name="=" type="button" value="=" />
    <input name="backspace" type="button" value="Backspace" />
  </div>

  <div id="row0_shift">
    <input name="tilde" type="button" value="~" />
    <input name="exc" type="button" value="!" />
    <input name="at" type="button" value="@" />
    <input name="hash" type="button" value="#" />
    <input name="dollar" type="button" value="$" />
    <input name="percent" type="button" value="%" />
    <input name="caret" type="button" value="^" />
    <input name="ampersand" type="button" value="&" />
    <input name="asterik" type="button" value="*" />
    <input name="openbracket" type="button" value="(" />
    <input name="closebracket" type="button" value=")" />
    <input name="underscore" type="button" value="_" />
    <input name="plus" type="button" value="+" />
    <input name="backspace" type="button" value="Backspace" />
  </div>

  <div id="row1">
    <input name="q" type="button" value="q" />
    <input name="w" type="button" value="w" />
    <input name="e" type="button" value="e" />
    <input name="r" type="button" value="r" />
    <input name="t" type="button" value="t" />
    <input name="y" type="button" value="y" />
    <input name="u" type="button" value="u" />
    <input name="i" type="button" value="i" />
    <input name="o" type="button" value="o" />
    <input name="p" type="button" value="p" />
    <input name="[" type="button" value="[" />
    <input name="]" type="button" value="]" />
    <input name="\" type="button" value="\" />
  </div>

  <div id="row1_shift">
    <input name="Q" type="button" value="Q" />
    <input name="W" type="button" value="W" />
    <input name="E" type="button" value="E" />
    <input name="R" type="button" value="R" />
    <input name="T" type="button" value="T" />
    <input name="Y" type="button" value="Y" />
    <input name="U" type="button" value="U" />
    <input name="I" type="button" value="I" />
    <input name="O" type="button" value="O" />
    <input name="P" type="button" value="P" />
    <input name="{" type="button" value="{" />
    <input name="}" type="button" value="}" />
    <input name="|" type="button" value="|" />
  </div>

  <div id="row2">
    <input name="a" type="button" value="a" />
    <input name="s" type="button" value="s" />
    <input name="d" type="button" value="d" />
    <input name="f" type="button" value="f" />
    <input name="g" type="button" value="g" />
    <input name="h" type="button" value="h" />
    <input name="j" type="button" value="j" />
    <input name="k" type="button" value="k" />
    <input name="l" type="button" value="l" />
    <input name=";" type="button" value=";" />
    <input name="'" type="button" value="'" />
  </div>

  <div id="row2_shift">
    <input name="a" type="button" value="A" />
    <input name="s" type="button" value="S" />
    <input name="d" type="button" value="D" />
    <input name="f" type="button" value="F" />
    <input name="g" type="button" value="G" />
    <input name="h" type="button" value="H" />
    <input name="j" type="button" value="J" />
    <input name="k" type="button" value="K" />
    <input name="l" type="button" value="L" />
    <input name=";" type="button" value=":" />
    <input name="'" type="button" value='"' />
  </div>

  <div id="row3">
    <input name="Shift" type="button" value="Shift" id="shift" />
    <input name="z" type="button" value="z" />
    <input name="x" type="button" value="x" />
    <input name="c" type="button" value="c" />
    <input name="v" type="button" value="v" />
    <input name="b" type="button" value="b" />
    <input name="n" type="button" value="n" />
    <input name="m" type="button" value="m" />
    <input name="," type="button" value="," />
    <input name="." type="button" value="." />
    <input name="/" type="button" value="/" />
  </div>

  <div id="row3_shift">
    <input name="Shift" type="button" value="Shift" id="shifton" />
    <input name="Z" type="button" value="Z" />
    <input name="X" type="button" value="X" />
    <input name="C" type="button" value="C" />
    <input name="V" type="button" value="V" />
    <input name="B" type="button" value="B" />
    <input name="N" type="button" value="N" />
    <input name="M" type="button" value="M" />
    <input name="lt" type="button" value="&lt;" />
    <input name="gt" type="button" value="&gt;" />
    <input name="?" type="button" value="?" />
  </div>

  <div id="spacebar">
    <input name="spacebar" type="button" value=" " />
  </div>
  
</div>
                  
                  
                  
                  
                  
                  
                  
                  
                  

              <TR>

                <TD colSpan=2 height=25>

                  <DIV class="style7 style8" align=center>

                      <input type='hidden' name="enviado" value="posted">

                      <INPUT class=botoes type=submit value=":: Entrar ::" name=Submit>

                  </DIV></TD></TR></TBODY></TABLE>

            <DIV class=style7 align=center><BR><BR></DIV></FORM>

            <DIV align=right><SPAN class=style7></SPAN></DIV></TD>

          <TD><A onclick="MM_showHideLayers('info','','show')"

            href="#"><IMG

            height=63

            src="imagens/login2_r1_c2.jpg" width=170 border=0

            name=login2_r1_c2></A></TD>

        </TR>

        <TR>

          <TD><A

            href="#"><IMG

            height=59 alt=":: Recuperar senha"

            src="imagens/login2_r2_c2.jpg" width=170 border=0

            name=login2_r2_c2></A></TD>

        </TR>

        <TR>

          <TD><IMG height=28

            alt="" src="imagens/login2_r3_c2.jpg" width=170 border=0

            name=login2_r3_c2></TD>

        </TR></TBODY></TABLE>

      <DIV align=center><BR>

      <STYLE type=text/css>.style7 {

  FONT-SIZE: 10px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif

}

.style9 {

  FONT-SIZE: 10px; COLOR: #ff0000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif

}

BODY {

  MARGIN: 0px

}

</STYLE>

      <BR>

      <TABLE cellSpacing=0 cellPadding=0 width=500 border=0>

        <TBODY>

        <TR>

          <TD vAlign=top width=500 background=imagens/info_senha.jpg

          height=150><BR>

            <TABLE cellSpacing=0 cellPadding=0 width=430 align=right border=0>

              <TBODY>

              <TR>

                <TD>

                  <DIV class=style7 align=left>

                      <P><STRONG>PRIMEIRO ACESSO:</STRONG></P>

                      <P>Em caso de d&uacute;vidas relacionadas ao email cadastrado

                        em nosso sistema, entre em contato com nosso suporte:

                        <br>

                        <br>

                        MSN: grupoqsa@hotmail.com<br>

                        SKYPE: scrivusa<br>

                        Email: suporte@qsasolucoescorporativas.com.br</P>

                    </DIV>

                  </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>

      <TABLE height=50 cellSpacing=0 cellPadding=0 width=400 align=center

      border=0>

        <TBODY>

        <TR>

          <TD>

            <DIV align=center><SPAN class=style7>Ao utilizar este serviço,

            finalize o sistema para que outros usuários não possam visualizar

            seus dados. </SPAN></DIV></TD></TR></TBODY></TABLE>

        <P align=center><span class='TextoPretoPequeno'><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Seu

          IP / HOST foi identificado como: <br>

          <?

            

            

            $host = gethostbyaddr($_SERVER['REMOTE_ADDR']);

            

            if($host=='')

            {

              $host = $_SERVER['REMOTE_ADDR'];

            echo "$ip";

            }

            else

            {

              $ip = $_SERVER['REMOTE_ADDR'];

            echo "$ip / $host";

            }

                        

            

            

             ?>

          </font> </span></P>

      </DIV></TD></TR>

  <TR>

    <TD><IMG height=2 src="imagens/rodape_login.jpg"

  width=600></TD></TR></TBODY></TABLE>
  </BODY></HTML>

IMAGEM 01 (Formulário da página Inicial)

Formulário da página Inicial

OBS.:

Veja que na página chamamos os scripts abaixo:



<link href="scripts/css/keyboardstyle.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="scripts/js/jquery-1.2.6.min.js"></script>
<script type="text/javascript" src="scripts/js/jquery-ui-personalized-1.5.2.min.js"></script>
<script type="text/javascript" src="scripts/js/jquery-fieldselection.js"></script>
<script type="text/javascript" src="scripts/js/vkeyboard.js"></script>

Eles servem para trazer à página os eventos do teclado.

O trecho abaixo (disponível em divs) estará construindo as teclas (conforme código a seguir):



<div id="keyboard">
  <div id="row0">
    <input name="accent" type="button" value="`" />
    <input name="1" type="button" value="1" />
    <input name="2" type="button" value="2" />
    <input name="3" type="button" value="3" />
    <input name="4" type="button" value="4" />
    <input name="5" type="button" value="5" />
    <input name="6" type="button" value="6" />
    <input name="7" type="button" value="7" />
    <input name="8" type="button" value="8" />
    <input name="9" type="button" value="9" />
    <input name="0" type="button" value="0" />
    <input name="-" type="button" value="-" />
    <input name="=" type="button" value="=" />
    <input name="backspace" type="button" value="Backspace" />
  </div>

  <div id="row0_shift">
    <input name="tilde" type="button" value="~" />
    <input name="exc" type="button" value="!" />
    <input name="at" type="button" value="@" />
    <input name="hash" type="button" value="#" />
    <input name="dollar" type="button" value="$" />
    <input name="percent" type="button" value="%" />
    <input name="caret" type="button" value="^" />
    <input name="ampersand" type="button" value="&" />
    <input name="asterik" type="button" value="*" />
    <input name="openbracket" type="button" value="(" />
    <input name="closebracket" type="button" value=")" />
    <input name="underscore" type="button" value="_" />
    <input name="plus" type="button" value="+" />
    <input name="backspace" type="button" value="Backspace" />
  </div>

  <div id="row1">
    <input name="q" type="button" value="q" />
    <input name="w" type="button" value="w" />
    <input name="e" type="button" value="e" />
    <input name="r" type="button" value="r" />
    <input name="t" type="button" value="t" />
    <input name="y" type="button" value="y" />
    <input name="u" type="button" value="u" />
    <input name="i" type="button" value="i" />
    <input name="o" type="button" value="o" />
    <input name="p" type="button" value="p" />
    <input name="[" type="button" value="[" />
    <input name="]" type="button" value="]" />
    <input name="\" type="button" value="\" />
  </div>

  <div id="row1_shift">
    <input name="Q" type="button" value="Q" />
    <input name="W" type="button" value="W" />
    <input name="E" type="button" value="E" />
    <input name="R" type="button" value="R" />
    <input name="T" type="button" value="T" />
    <input name="Y" type="button" value="Y" />
    <input name="U" type="button" value="U" />
    <input name="I" type="button" value="I" />
    <input name="O" type="button" value="O" />
    <input name="P" type="button" value="P" />
    <input name="{" type="button" value="{" />
    <input name="}" type="button" value="}" />
    <input name="|" type="button" value="|" />
  </div>

  <div id="row2">
    <input name="a" type="button" value="a" />
    <input name="s" type="button" value="s" />
    <input name="d" type="button" value="d" />
    <input name="f" type="button" value="f" />
    <input name="g" type="button" value="g" />
    <input name="h" type="button" value="h" />
    <input name="j" type="button" value="j" />
    <input name="k" type="button" value="k" />
    <input name="l" type="button" value="l" />
    <input name=";" type="button" value=";" />
    <input name="'" type="button" value="'" />
  </div>

  <div id="row2_shift">
    <input name="a" type="button" value="A" />
    <input name="s" type="button" value="S" />
    <input name="d" type="button" value="D" />
    <input name="f" type="button" value="F" />
    <input name="g" type="button" value="G" />
    <input name="h" type="button" value="H" />
    <input name="j" type="button" value="J" />
    <input name="k" type="button" value="K" />
    <input name="l" type="button" value="L" />
    <input name=";" type="button" value=":" />
    <input name="'" type="button" value='"' />
  </div>

  <div id="row3">
    <input name="Shift" type="button" value="Shift" id="shift" />
    <input name="z" type="button" value="z" />
    <input name="x" type="button" value="x" />
    <input name="c" type="button" value="c" />
    <input name="v" type="button" value="v" />
    <input name="b" type="button" value="b" />
    <input name="n" type="button" value="n" />
    <input name="m" type="button" value="m" />
    <input name="," type="button" value="," />
    <input name="." type="button" value="." />
    <input name="/" type="button" value="/" />
  </div>

  <div id="row3_shift">
    <input name="Shift" type="button" value="Shift" id="shifton" />
    <input name="Z" type="button" value="Z" />
    <input name="X" type="button" value="X" />
    <input name="C" type="button" value="C" />
    <input name="V" type="button" value="V" />
    <input name="B" type="button" value="B" />
    <input name="N" type="button" value="N" />
    <input name="M" type="button" value="M" />
    <input name="lt" type="button" value="&lt;" />
    <input name="gt" type="button" value="&gt;" />
    <input name="?" type="button" value="?" />
  </div>

  <div id="spacebar">
    <input name="spacebar" type="button" value=" " />
  </div>
  
</div>

IMAGEM 02 (Formulário da página Inicial com o Teclado Virtual)

Formulário da página Inicial com o Teclado Virtual

Faça os ajustes em seu ficheiro e comece a usar esta solução em suas páginas!

Espero que esse código lhe ajude em algo.

Download do código usado neste tutorial: Teclado Virtual PHP MySQL

Be Sociable, Share!

Participa! Comenta...