Salve galera, blz?

Bom, hj vou postar um script de login e senha q utilizo em meus sistemas. Apesar de ser bem simples, é bastante eficaz, tem algumas prevençoes contra SQL injection e possui o recurso que ao direciona o usuario para a tela de login, ele grava a ultima pagina q o usuario tentou acessar e depois de logado, leva novamente o usuario para a mesma.

Bom, a estrutura do banco é a seguinte:




O nome q adotei para este banco de dados é : meu_banco.mdb

O codigo completo do sistema pode ser baixado aqui!

login.asp
CODE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script language="JavaScript" type="text/JavaScript">
function ValidaCadastro(form)
{
      
     if (form.frm_login.value == "")
     {
       alert("Login não Informado!");
       return false;
     }
     else if (form.frm_senha.value == "")
     {
       alert("Senha não informada!");
       return false;
     }
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Login</title>
<style type="text/css">
<!--
body {
    margin-left: 0px;
    margin-top: 00px;
    margin-right: 0px;
    margin-bottom: 0px;
}
body,td,th {
    font-family: Verdana;
    color: #333333;
}
.style1 {
    color: #CC0000;
    font-weight: bold;
}
-->
</style></head>

<body>
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td align="center" valign="middle"><form action="valida_login.asp" method="post" name="form" onSubmit="return ValidaCadastro(this)">
      <table width="35%" border="2" align="center" cellpadding="5"cellspacing="0" bordercolor="#666666" class="categoria">
      <tr>
        <td colspan="2"><div align="center" class="style1">&Aacute;rea restrita </div></td>
        </tr>
      <tr>
        <td bgcolor="#E8E8E8"><strong>Login:</strong></td>
        <td bgcolor="#E8E8E8"><div align="left">
            <input name="frm_login" type="text" id="frm_login" size="15" />
        </div></td>
      </tr>
      <tr>
        <td bgcolor="#E8E8E8"><strong>Senha:</strong></td>
        <td bgcolor="#E8E8E8"><div align="left">
            <input name="frm_senha" type="password" id="frm_senha" size="15" maxlength="8" />
        </div></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td align="right"><div align="left">
            <input name="Enviar" type="submit" class="Botao" id="Enviar" value="Entrar" />
          &nbsp;&nbsp;&nbsp; </div></td>
      </tr>
    </table>
    </form></td>
  </tr>
</table>
</body>
</html>


valida_login.asp
CODE
<%
'Recuperamos o dados que foram digitados no formulário
'e já substituimos as aspas simples por aspas duplas

login = request.form(Replace("frm_login", "'", "''"))
senha = request.form(Replace("frm_senha", "'", "''"))

'Verificamos se os campos nao estao vazio
if login = "" then
response.redirect "login.asp"
response.end()
end if

if senha = "" then
response.redirect "login.asp"
response.end()
end if

'Evitando o SQL injection, ou simplesmente a entrada forçada

login = replace(login,"'","''")
login = replace(login,"#","''")
login = replace(login,"$","''")
login = replace(login,"%","''")
login = replace(login,"¨","''")
login = replace(login,"&","''")
login = replace(login,"'or'1'='1'","''")
login = replace(login,"--","''")
login = replace(login,"insert","''")
login = replace(login,"drop","''")
login = replace(login,"delet","''")
login = replace(login,"xp_","''")
login = replace(login,"select","''")
login = replace(login,"*","''")

'Evitando o SQL injection, ou simplesmente a entrada forçada
senha = replace(senha,"'","''")
senha = replace(senha,"#","''")
senha = replace(senha,"$","''")
senha = replace(senha,"%","''")
senha = replace(senha,"¨","''")
senha = replace(senha,"&","''")
senha = replace(senha,"'or'1'='1'","''")
senha = replace(senha,"--","''")
senha = replace(senha,"insert","''")
senha = replace(senha,"drop","''")
senha = replace(senha,"delet","''")
senha = replace(senha,"xp_","''")
senha = replace(senha,"select","''")
senha = replace(senha,"*","''")

'Criamos a conexao com o banco de dados.
set conexao = Server.CreateObject("ADODB.Connection")
conexao.provider= "Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("meu_banco.mdb")&";"
conexao.open

'Vamos buscar o Login e senha no banco de dados
SQL = "select * from usuarios where login_usuario = '"&login&"' and senha_usuario = '"&senha&"' "
Set RS = Conexao.Execute(SQL)


'Verificamos se esta tudo OK.Se nao tiver, é mostrada a mensagem abaixo.
If RS.EOF Then
  Response.Write "<center><b>Login ou Senha errada. Tente novamente!</b></center>"
  Response.End()
End If

'Vamos colocar os dados do usuario logado numa session
'para usarmos mais tarde e fazer a verificação se ele esta logado.

'OBS.: Nao utilize nomes obvios para esta session(evita a invasão).
session("usr_log_ok") = RS("id_usuario")

'Agora vamos gravar o IP do usuario no Banco de dados.

ip_usuario = Request.ServerVariables("REMOTE_ADDR")
SQL2 = "Update usuarios set ip_usuario='"&ip_usuario&"' where id_usuario="&rs("id_usuario")
conexao.execute(sql2)

'fecha e destroi o record set
rs.close
set rs = nothing

'fecha a conexao
conexao.close

'redirecionando para a pagina Administrativa(restrita) ou para
'a ultima pagina q o usuario estava.

If Session("pagina_restrita") = "" then
response.Redirect("admin.asp")
else
response.Redirect Session("pagina_restrita")
end if
%>


admin.asp
CODE
<%
'este trecho deve estar em todas as paginas em que o conteudo for restrito.
If session("usr_log_ok")="" Then
  Response.Write "Você está Logado no sistema!"
  Response.write "<a href='login.asp'>Clique aqui para se logar.</a>"
  
  ' Caso voce queira utilizar esse scripts para paginas que necessitem querystring's ou
  'fazer o usuario, após se logar, voltar para a pagina que estava, manhenha o codigo abaixo
  'lembrando q se a pagina contiver querystring's, vc deve trocar o nome da variavel ID.
  'Se nao for seu caso, vc pode simplesmente comentar a linha abaixo usando um ' antes da session
  
  Session("pagina_restrita") = Request.ServerVariables("SCRIPT_NAME")&"?"&request.ServerVariables("QUERY_STRING")
  
  'aqui para de executar o script caso a pessoa nao esteja logada.
  Response.End()
End If

'Criamos a conexao com o banco de dados.
set conexao = Server.CreateObject("ADODB.Connection")
conexao.provider= "Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("meu_banco.mdb")&";"
conexao.open

'Vamos buscar o usuario no banco de dados
SQL = "select * from usuarios where id_usuario ="&session("usr_log_ok")
Set RS = Conexao.Execute(SQL)
If rs.eof then
Response.write "Ocorreu um Erro!"
Else

%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Administrador</title>
</head>

<body>
Olá, <%=rs("nome_usuario")%>. Seu IP é: <%= rs("ip_usuario")%>

<p>Aqui você coloca todo seu conteudo restrito.</p>
</body>
</html>
<%end if%>


Bom galera, é isso. qualquer duvidas postem ai.

Espero q seja de grande ajuda.

Abraço
LucasBr

Você gostou? Comente no fórum!

Comentários:

Daniel Caliope disse:

Legal esse tuto simples e fácil, agora você poderia mostrar como faz um sistema de cadastro nesse mesmo banco né!?! Assim ficaria já o sistema completo!!

Abraços....

Lucasbr disse:

Eu ja estava preparando um esuqema desse mesmo caliope. e ainda vou colocar a funçao de "recuperar senha", na qual se o cara esquece a senha dele, ele recebe no email uma copia.

Joaquim Tito disse:

QUOTE(Caliope @ Aug 2 2006, 10:28 AM) [snapback]5373[/snapback]
Legal esse tuto simples e fácil, agora você poderia mostrar como faz um sistema de cadastro nesse mesmo banco né!?! Assim ficaria já o sistema completo!!
Abraços....

Não alimente os tubarões...
Vc dá a mão, eles querem o braço woot.gif sm_cool.gif

Vai ficar bacana Lucas!

Thiago Ananias disse:

sabe oq seria legal implementar... tipow, quando vc tenta se logar na locaweb, e erra varias vezes deve ser uma cinco ou tres tentativas... ele deixa o sistema travado por um tempo para esta maquina. Mas outras podem se logar na boa... sei lah eh uma sugestão ! FLW!!!!

Ver o restante dos comentários no fórum (e aproveitar pra comentar também !).

Mais recentes em ASP

Asp info
Por Lucasbr - Veja as configurações do seu servidor...
Criptografia sha-256 em asp
Por Lucasbr - A família de sha (secure hash algorithm) está relacionada...
Tabela dinâmnica
Por RobsonUgoStoso - Montando uma tabela dinâmica com datas...
Cdosys error '8004020f' - a solução
Por David Cruvinel - A solução...
Recuperar stored procedure
Por Pinguim - No trampo novo, precisei recuperar algumas storedprocedures....

Ver mais Artigos de ASP.

Ver e retirar outras dúvidas no fórum Webly.

Alguns Direitos Reservados | RSS | O Fórum

Webly Portal e Fóruns - Internet + Humana | Design by ArthurHenrique.com