Como usar o banco de dados e as sessões ASP para implementar a segurança ASP

Traduções deste artigo Traduções deste artigo
ID do artigo: 299987 - Exibir os produtos aos quais esse artigo se aplica.
Aviso
Recomendamos que todos os usuários atualizem para a versão 6.0 do Serviços de informações da Internet (IIS) executado no Microsoft Windows Server 2003. O IIS 6.0 aumenta de forma significativa a segurança da infra-estrutura da Web. Para obter informações adicionais sobre tópicos relacionados a segurança IIS, visite o seguinte site da Microsoft:
http://www.microsoft.com/brasil/security/guidance/prodtech/iis.mspx
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo detalhado discute como implementar uma segurança com base em formulários para os aplicativos ASP (Active Server Pages). Você pode usar esse mecanismo quando sua aplicação é segurança aprimorada ou quando você permite apenas usuários autenticados. Também é possível usar esse mecanismo quando os usuários, como os usuários da Internet, não fazem parte de seu domínio interno. Este exemplo usa um banco de dados para armazenar as informações dos usuários e validá-los nesse mesmo banco de dados.

Pré-requisitos

  • Microsoft Windows NT 4.0 Workstation, Windows NT 4.0 Server, Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server ou Microsoft Windows Server 2003
  • Os Serviços de informações da Internet da Microsoft (IIS) 4.0 para os computadores executando o Windows NT 4.0, os Serviços de informações da Internet (IIS) 4.0 para os computadores executando o Windows 2000 ou os Serviços de informações da Internet (IIS) 6.0 para os computadores executando o Windows Server 2003
  • Microsoft SQL Server 6.5 ou uma versão mais recente do SQL Server

Como desenvolver este aplicativo

Esta seção descreve brevemente as etapas necessárias para implementar a segurança com base em formulários ou a segurança personalizada em seu aplicativo da Web em ASP:
  1. Apresente um formulário de logon ao usuário.
  2. Valide as credenciais do usuário, comparando-as com as informações do usuário armazenadas no seu banco de dados de usuário.
  3. Crie uma variável de sessão e defina seu valor para a identificação do usuário.
  4. Para cada solicitação subseqüente feita pelo usuário, verifique se o valor dessa variável não é igual a uma seqüência de caracteres em branco (""), para confirmar se ele fez logon.
  5. Se a variável estiver em branco, o usuário não é válido ou fez logoff da sessão. Redirecione o usuário para a página de logon, se a variável estiver em branco.
  6. Se o logon falhar porque esse usuário não existe em seu banco de dados, talvez ele ainda não esteja registrado em seu site. Redirecione o usuário para a página Register.asp para permitir que ele se registre em seu site. Quando o usuário se registra, seus detalhes são adicionados ao banco de dados de usuário.
  7. Forneça um link para a página de logoff em todas as páginas, exceto na página de logon, para permitir que o usuário faça logoff da sessão. Essa página limpa a variável de sessão que está mantendo a identificação do usuário, atribuindo a ela uma seqüência de caracteres em branco ("").

Crie uma tabela do banco de dados de usuário

  1. Clique em Iniciar e em Executar, digite notepad na caixa Abrir e pressione ENTER.
  2. Destaque o seguinte script SQL, clique com o botão direito do mouse nele e clique em Copiar. No Bloco de notas, clique em Colar no menu Editar.
     CREATE TABLE [Users] ( 	[uid] [varchar] (25) NOT NULL , 	[password] [varchar] (25) NOT NULL , 	CONSTRAINT [PK_Users] PRIMARY KEY  CLUSTERED  	( 		[uid] 	)  ON [PRIMARY]  ) ON [PRIMARY] GO 					
  3. No menu Arquivo, clique em Salvar. Na caixa Nome do arquivo, digite User.txt.
  4. Clique em Iniciar, aponte para Programas, para Microsoft SQL Server e clique em Query Analyzer. Na caixa de diálogo Conectar-se ao SQL Server, especifique o nome do servidor que está executando o SQL Server, a identificação do usuário e a senha para se conectar ao SQL Server.
  5. No menu Arquivo, clique em Abrir. Na caixa de diálogo Abrir, clique em Todos os arquivos (*.*) na caixa Arquivos do tipo. Clique em User.txt na lista e em Abrir.
  6. Na caixa DB da barra de ferramentas, selecione o banco de dados em que você quer criar essa tabela. Se você não tiver um banco de dados específico para isso, clique em Pubs para criar essa tabela no banco de dados Pubs de exemplo.
  7. Após selecionar o banco de dados, clique em Executar no menu Consulta para executar a consulta. Isso cria uma tabela Usuários no banco de dados selecionado.

Crie e configure o diretório virtual

  1. No Windows Explorer, crie uma pasta na raiz da Web. Por padrão, a raiz da Web é Unidade_do_sistema:\Inetpub\Wwwroot. Nomeie a pasta ASPSecureAPP.
  2. Inicie o Console de Gerenciamento Microsoft (MMC) do Gerenciador de serviços de Internet.

    Observação No Windows NT 4.0, o MMC está nomeado como Gerenciador de serviços de Internet.
    • Para abrir o Gerenciador de serviço da Internet em um computador que está executando o Windows 2000 ou o Windows Server 2003, clique em Iniciar, em Executar, digite inetmgr na caixa Abrir e pressione ENTER.
    • Para abrir o Gerenciador de serviços de Internet em um computador executando o Windows NT 4.0, execute as seguintes etapas:
      1. Clique Iniciar, aponte para Programas, para Windows NT 4.0 Option Pack e clique em Serviço de informação da Internet da Microsoft.
      2. Clique em Gerenciador de serviço de Internet.
  3. Expanda Computador e Site padrão da Web. Clique com o botão direito do mouse na pasta ASPSecureAPP que você criou na etapa 1 e clique em Propriedades.
  4. Na guia Diretório na caixa de diálogo Propriedades, clique em Criar na seção Configurações do aplicativo para marcar o diretório como um aplicativo.

Crie as páginas de exemplo

Observação Se você usar um Bloco de notas para cria essas páginas, verifique se você clicou em Todos os arquivos na caixa Salvar como tipo da caixa de diálogo Salvar como ao salvar os arquivos.
Logon.asp.
Esta página permite que os usuários digitem seu nome de usuário e sua senha para acessar o site.

Copie o seguinte código em um página ASP nova. Salve o arquivo Logon.asp na pasta ASPSecureAPP do diretório Inetpub\Wwwroot.
<%
'The following three lines of code are used to make sure that this page is not cached on the client.
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
%>
<html><body>
<form action="Validate.asp" method="post">
<P>
Login ID:&#xa0;&#xa0;  <INPUT type=text id=UID  name=UID> <br>
Password:&#xa0;&#xa0;<input type="password" id="passwd" name="passwd"> 
</P>
<input type="submit" value="Logon" id="submit1" name="submit1">
</form>
</body></html>
				
Validate.asp
Após o usuário fornecer suas informações de logon para fazer logon no seu aplicativo, essa página valida as informações e redireciona o usuário para a página apropriada.

Copie o seguinte código em um página ASP nova. Modifique os parâmetros de conectar seqüência de caracteres para que elas contenham valores válidos. Estes parâmetros desta seqüência são:
  • Identificação do usuário
  • Senha
  • Catálogo inicial
  • Fonte de dados
Salve o arquivo Validate.asp na pasta ASPSecureAPP do diretório Inetpub\Wwwroot.
<%
Response.Buffer=true

'The following three lines of code are used to make sure that this page is not cached on the client.
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1

Dim userid
Dim Pwd
'Assign the user ID to this variable. The user provides the user ID.
userid= Request.Form("UID")
'Check whether userid is an empty string. If it is empty, redirect to Logon.asp.
'If it is not empty, connect to the database, and validate the user.

if userid <> "" then
    pwd = Request.Form("passwd")
	
    Dim Cn
    Dim Rs
    Dim StrConnect

'Specify the connection string to access the database.
'Remember to change the following connection string parameters to reflect the correct values
'for your SQL server.
    StrConnect = "Provider=SQLOLEDB.1;User ID=<username>;Password=<strong password>;Initial Catalog=pubs;" & _
    "Network Library=dbmssocn;Data Source=servername"

    Set Cn = Server.CreateObject("ADODB.Connection")
    Cn.Open StrConnect
    Set Rs = Server.CreateObject("ADODB.Recordset")
    Rs.Open "Select * from Users where uid='" & userid & "'",Cn
'Check to see whether this user ID exists in your database.
    If Not Rs.EOF then
        If strcomp( pwd, Rs.Fields("password").value , 1) = 0 then
'Password is correct. Set a session variable, and redirect the user to a Default.asp page
'or the main page in your application.
            Session("UID") = userid
            Response.Redirect "Default.asp"
            Response.End
        Else
'Password is incorrect. Redirect the user to the logon page.
            Response.Redirect "Logon.asp"
            Response.End
        End if
    Else
'If the user is not in your database, point him or her to the Register.asp page
'so that he or she can register at your Web site to access your application.
        Response.Redirect "Register.asp"
        Response.End
    End if
Else
    Response.Redirect "Logon.asp"
    Response.End
End if

%>
				
Register.asp
Esta página permite que os usuários digitem seu nome de usuário e sua senha para acessar o site.

Copie o seguinte código em um página ASP nova. Modifique os parâmetros de conectar seqüência de caracteres para que elas contenham valores válidos. Estes parâmetros desta seqüência são:
  • Identificação do usuário
  • Senha
  • Catálogo inicial
  • Fonte de dados
Salve o arquivo Register.asp na pasta ASPSecureAPP do diretório Inetpub\Wwwroot.
<%
Response.Buffer=true

'The following three lines of code are used to make sure that this page is not cached on the client.
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1

'Check whether user has submitted user name and password so that you can 
'add that user to the users database and register him or her as a valid 
'user to use this application.
'This is just the minimal code that you need. You can customize this the way you want.
Dim pwd
Dim userid

userid = Request.Form("uname")
pwd = Request.Form("pwd")

If userid <> "" then
    If  pwd <> "" then
        Dim Cn
        Dim Rs
        Dim StrConnect

'Specify the connection string to access the database.
'Remember to change the following connection string parameters to reflect the correct values
'for your SQL server.
        StrConnect = "Provider=SQLOLEDB.1;User ID=<username>;Password=<strong password>;" & _
        "Initial Catalog=pubs;Network Library=dbmssocn;Data Source=servername"

        Set Cn = Server.CreateObject("ADODB.Connection")
        Cn.Open StrConnect
        Set Rs = Server.CreateObject("ADODB.Recordset")
        Rs.Open "Select * from Users where uid='" & userid & "'",Cn,3
        If Rs.RecordCount>0 then
            Response.Write "The Username that you entered has already been taken by someone else."
            Response.Write "Use a different Username."
            Set Rs = Nothing
            Set Cn = Nothing
        Else
            Dim records
            Cn.Execute "INSERT INTO USERS1 (uid,password) VALUES" & _
            "('" & userid & "','" & pwd & "')" , records
            If records=1 then
                Response.Write "You have been registered successfully."
                Set Rs = Nothing
                Set Cn = Nothing
                Session("UID")= userid
                Response.Redirect "Default.asp"
                Response.End 			
            Else
                Response.Write Err.Description
                Set Rs = Nothing
                Set Cn = Nothing
                Response.End 			
            End if
        End if
    Else
    Response.Write "Password is empty. Could not register. Try again."
    End if
End if
%>

<html>
<head>
<script language="javascript">
function callsubmit()
{

if (frm1.pwd.value==frm1.pwdc.value) {
frm1.submit();
}
else
{
alert("Password does not match. Re-enter the password");
}

}
</script>
</head>
<body>
<form action="" method="post" id=frm1 name=frm1>
<P>
Login ID:&#xa0;&#xa0;  <INPUT type=text id=uname  name=uname> <br>
Password:&#xa0;&#xa0;<input type="password" id="pwd" name="pwd"> <br>
Confirm Password:&#xa0;&#xa0;<input type="password" id="pwdc" name="pwdc"> 
</P>
<input type="button" value="Register" id="submit1" name="submit1" onclick=javascript:callsubmit();>
</form>
</body>
</html>
				
Logoff.asp
Esta página permite que os usuários façam logoff.

Copie o seguinte código em um página ASP nova. Salve o arquivo Logoff.asp na pasta ASPSecureAPP do diretório Inetpub\Wwwroot.
<%
Response.Buffer=True

'The following three lines of code are used to make sure that this page is not cached on the client.
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1

'Set the session variable to an empty string and also destroy the session to make
'to complete the user session.
Session("UID")=""
Session.Abandon
Response.Redirect "Logon.asp"
Response.End
%>
				
Default.asp
É possível usar esta página para testar as outras páginas que você criou.

Copie o seguinte código em um página ASP nova. Salve o arquivo Default.asp na pasta ASPSecureAPP do diretório Inetpub\Wwwroot.
<%
'The following three lines of code are used to make sure that this page is not cached on the client.
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1

if session("UID")="" then 
    Response.Redirect "Logon.asp"
    Response.End
else
    Response.Write "You are logged on as " & session("UID") & "<br>"
end if
%>
<HTML>
<BODY>
<A HREF="Logoff.asp">Click here to log off</A>
<BODY>
</HTML>
				

Adicione um código de validação às páginas

O seguinte código verifica se o usuário já fez logon no site e ainda não fez logoff.

Copie esse bloco de código em cada uma das páginas ASP de segurança avançada, exceto na página Logon.asp e na Validate.asp. Não adicione esse código às páginas Logon.asp ou Validate.asp. Verifique se colou esse código no início de cada página para que ele apareça primeiro.
<%
'The following three lines of code are used to make sure that this page is not cached on the client.
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1

if session("UID")="" then 
    Response.Redirect "Logon.asp"
    Response.End
end if
%>
				

Como esse aplicativo funciona

Em termos práticos, esse aplicativo tem duas páginas (Logon.asp e Register.asp) que qualquer um pode visualizar sem fornecer suas credenciais. Para visualizar as páginas restantes, um usuário deve fazer logon usando uma identificação de usuário e uma senha válidas. Portanto, quando um usuário navega diretamente para qualquer página que exige informações de logon, ele é redirecionado à página Logon.asp. Os usuários devem fornecer uma identificação de usuário e uma senha válidas na página Logon.asp. Se a senha estiver incorreta, o usuário pode fazer logon novamente.

Se a identificação e a senha do usuário não existirem em seu banco de dados, o usuário é redirecionado para a página Register.asp na qual ele pode se registrar para usar o seu aplicativo. Quando o usuário se registra no seu site pela página Register.asp, seus detalhes são inseridos no banco de dados que você está usando para validar os usuários.

Solução de problemas

  • Com base nos requisitos e no nível de segurança desse aplicativo, é possível ativar a criptografia Secure Sockets Layer (SSL) em Logon.asp para evitar a transferência das credenciais de usuário em texto não criptografado.
  • Essas contas de usuário não são mapeadas para as contas do Windows. Portanto, não é possível usar diretamente as suas contas do Windows para fazer logon nesse aplicativo.
  • Esse mecanismo de segurança usa informações com base na Seção ASP. Portanto, esse mecanismo não funciona com os usuários que não possuem cookies habilitados.

Referências

Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de Dados de Conhecimento da Microsoft:
172138 Como criar um diretório virtual do ISS (Internet Information Services)
282060 Recursos para proteção dos Serviços de informações de Internet
299970 Como usar as permissões NTFS para proteger uma página da Web executada no IIS 4.0 ou 5.0

Propriedades

ID do artigo: 299987 - Última revisão: terça-feira, 5 de setembro de 2006 - Revisão: 5.1
A informação contida neste artigo aplica-se a:
  • Microsoft Active Server Pages 4.0
Palavras-chave: 
kbaspobj kbdatabase kbhowtomaster kbsecurity KB299987
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com