Como utilizar a base de dados e sessões ASP para implementar segurança ASP

Traduções de Artigos Traduções de Artigos
Artigo: 299987 - Ver produtos para os quais este artigo se aplica.
Importante
Recomendamos vivamente que todos os utilizadores actualizem para Microsoft (IIS) 6.0 em execução no Microsoft Windows Server 2003. O IIS 6.0 aumenta significativamente Web infra-estrutura de segurança. Para mais informações sobre tópicos relacionados com a segurança do IIS, visite o seguinte Web site da Microsoft:
http://www.microsoft.com/technet/security/prodtech/IIS.mspx
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo passo a passo descreve como implementar segurança baseada em formulários para aplicações de ASP (Active Server Pages). Pode utilizar este mecanismo quando a aplicação é avançada de segurança ou quando pretende permitir que apenas utilizadores autenticados. Também pode utilizar este mecanismo quando os utilizadores não fazem parte do domínio interno, tais como os utilizadores da Internet. Este exemplo utiliza uma base de dados para armazenar informações dos utilizadores e, em seguida, valida os utilizadores relativamente a esta base 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
  • Microsoft Internet Information Server (IIS) 4.0 para computadores que executem o Windows NT 4.0, Microsoft Internet Information Services (IIS) 5.0 para computadores que executem o Windows 2000 ou Microsoft Internet Information Services (IIS) 6.0 para computadores que estão a executar o Windows Server 2003
  • Microsoft SQL Server 6.5 ou uma versão posterior do SQL Server

Como estruturar esta aplicação

Esta secção descreve resumidamente os passos necessários para implementar segurança baseada em formulários ou segurança personalizado no seu aplicativo da Web ASP:
  1. Apresenta um formulário de início de sessão ao utilizador.
  2. Valide as credenciais de utilizador relativamente as informações de utilizador armazenadas na base de dados do utilizador.
  3. Criar uma variável de sessão e defina o respectivo valor como o ID do utilizador.
  4. Para cada pedido subsequente que o utilizador, confirme se o valor da variável de sessão não é igual a uma cadeia vazia ("") para confirmar que o utilizador tem sessão iniciada.
  5. Se a variável estiver vazia, o utilizador não é um utilizador válido ou o utilizador tem sessão a partir da sessão. Redireccione o utilizador para a página de início de sessão se a variável vazia.
  6. Se o início de sessão falhar porque o utilizador não existe na base de dados, o utilizador pode não estar registado no seu site ainda. Redireccione o utilizador para a página registo.asp para que o utilizador pode registar no site. Quando regista o utilizador, os detalhes de utilizador é adicionado à base de dados de utilizador.
  7. Fornecem uma hiperligação para a página terminar em todas as páginas excepto a página de início de sessão para que o utilizador pode terminar a sessão. Esta página limpa a variável de sessão que possui o ID de utilizador através da atribuição é uma cadeia vazia ("").

Criar uma tabela de base de dados de utilizador

  1. Clique em Iniciar , clique em Executar , escreva o bloco de notas na caixa Abrir e, em seguida, prima ENTER para iniciar o bloco de notas.
  2. Realce o seguinte script de SQL, clique com o botão direito do rato o script e, em seguida, 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 ficheiro , clique em Guardar . Na caixa nome do ficheiro , escreva User.txt .
  4. Clique em Iniciar , aponte para programas , aponte para Microsoft SQL Server e, em seguida, clique em Query Analyzer . Na caixa de diálogo ligar ao SQL Server , especifique o nome do servidor com o SQL Server, o ID de utilizador e a palavra-passe para ligar ao SQL Server.
  5. No menu ficheiro , clique em Abrir . Na caixa de diálogo Abrir , clique em todos os ficheiros (*. *) na caixa ficheiros do tipo . Clique em User.txt na lista e, em seguida, clique em Abrir .
  6. Na caixa base de dados na barra de ferramentas, seleccione a base de dados na qual pretende criar esta tabela. Se tiver não uma base de dados específico para esta finalidade, clique em pubs para criar esta tabela na base de dados exemplo Pubs.
  7. Depois de seleccionar a base de dados, clique em Executar no menu de consulta para executar a consulta. Este passo cria uma tabela de utilizadores a base de dados seleccionada.

Criar e configurar o directório virtual

  1. No Explorador do Windows, crie uma pasta na raiz da Web. Por predefinição, a raiz da Web é SystemDrive: \Inetpub\Wwwroot. Nome da pasta ASPSecureAPP.
  2. Abra ao Internet Services Gestor mesma (MMC).

    Nota No Windows NT 4.0, este MMC é denominada ' Gerenciador de serviços de Internet '.
    • Para abrir o Gestor de serviços da Internet no computador que está a executar o Windows 2000 ou Windows Server 2003, clique em Iniciar , clique em Executar , escreva inetmgr na caixa Abrir e, em seguida, prima ENTER.
    • Para abrir o ' Gerenciador de serviços de Internet ' num computador com o Windows NT 4.0, siga estes passos:
      1. Clique em Iniciar , aponte para programas , aponte para o Windows NT 4.0 Option Pack e, em seguida, clique em Microsoft Internet Information Server .
      2. Clique em Internet Service Manager .
  3. Expanda computador e, em seguida, expanda o Web Site predefinido . Clique com o botão direito do rato a pasta ASPSecureAPP que criou no passo 1 e, em seguida, clique em Propriedades .
  4. No separador directório na caixa de diálogo Propriedades , clique em criar na secção Definições de aplicações para marcar o directório como uma aplicação.

Criar as páginas de exemplo

Nota Se utilizar o bloco de notas para criar estas páginas, certifique-se de que clica em Todos os ficheiros na caixa Guardar C/ o tipo da caixa de diálogo Guardar como quando guarda os ficheiros.
Logon.asp num
Esta página permite aos utilizadores introduzirem o respectivo nome de utilizador e palavra-passe para aceder ao site.

Copie o código seguinte para uma nova página ASP. Guarde o ficheiro como logon.asp na pasta do directório Inetpub\Wwwroot ASPSecureAPP.
<%
'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
Depois do utilizador fornece informações de início de sessão respectivo para iniciar sessão aplicação, esta página valida as informações de utilizador e, em seguida, redirecciona o utilizador para a página adequada.

Copie o código seguinte para ASP uma nova página. Altere os parâmetros de cadeia de ligação para que contêm valores válidos. Os parâmetros de cadeia de ligação são os seguintes:
  • ID de utilizador
  • palavra-passe
  • catálogo inicial
  • origem de dados
Guarde o ficheiro como Validate.asp na pasta do directório Inetpub\Wwwroot ASPSecureAPP.
<%
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

%>
				
Registo.asp
Esta página permite aos utilizadores registar o respectivo ID de utilizador e palavra-passe para aceder ao site.

Copie o código seguinte para ASP uma nova página. Altere os parâmetros de cadeia de ligação para que contêm valores válidos. Os parâmetros de cadeia de ligação são os seguintes:
  • ID de utilizador
  • palavra-passe
  • catálogo inicial
  • origem de dados
Guarde o ficheiro como registo.asp na pasta do directório Inetpub\Wwwroot ASPSecureAPP.
<%
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 aos utilizadores terminar a sessão.

Copie o código seguinte para uma nova página ASP. Guarde o ficheiro como Logoff.asp na pasta do directório Inetpub\Wwwroot ASPSecureAPP.
<%
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
Pode utilizar esta página para testar as outras páginas que tenha criado.

Copie o código seguinte para uma nova página ASP. Guarde o ficheiro como default.asp na pasta do directório Inetpub\Wwwroot ASPSecureAPP.
<%
'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>
				

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

O seguinte código verifica se o utilizador tenha já iniciado sessão no seu site e tem não terminar a sessão ainda.

Copie este bloco de código para cada uma das páginas ASP com segurança melhorada, excepto a página logon.asp num e a página Validate.asp. Não adicione este código para a página logon.asp num ou para a página Validate.asp. Certifique-se de que colar este código na parte superior de cada página de modo a que este código aparece em primeiro lugar.
<%
'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 funciona esta aplicação

Essencialmente, esta aplicação tem duas páginas (Logon.asp num e registo.asp) que qualquer pessoa possa ver sem fornecer as respectivas credenciais. Para visualizar as restantes páginas do, um utilizador tem de iniciar sessão utilizando um ID de utilizador válido e palavra-passe. Por conseguinte, quando um utilizador navega directamente para qualquer página que requer informações de início de sessão, o utilizador é redireccionado para a página logon.asp num. Os utilizadores tem de fornecer um ID de utilizador válido e palavra-passe na página logon.asp num. Se a palavra-passe estiver incorrecta, o utilizador pode tentar iniciar sessão novamente.

Se não existirem ID de utilizador e palavra-passe do utilizador na base de dados, o utilizador é redireccionado para a página registo.asp onde o utilizador pode registar para utilizar a aplicação. Quando os registos de utilizador no seu Web site através de registo.asp a página, que são introduzidos os detalhes de utilizador da base de dados utilizador estiver a utilizar para validar os utilizadores.

Resolução de problemas

  • Com base nos requisitos e qual esta aplicação é a segurança, pode activar a encriptação do Secure Sockets Layer (SSL) no logon.asp para evitar a transferência as credenciais do utilizador em texto simples.
  • Estas contas de utilizador não mapeie para contas do Windows. Por este motivo, pode utilizar directamente as contas do Windows para iniciar sessão esta aplicação.
  • Este mecanismo de segurança utiliza informações baseadas na sessão de ASP. Este mecanismo por este motivo, não funciona para utilizadores não cookies activados.

Referências

Para obter mais informações, clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
172138Como criar um directório virtual em Serviços de informação Internet (IIS)
282060Recursos de segurança dos serviços de informação Internet
299970Como utilizar as permissões de NTFS para proteger uma página Web em execução no IIS 4.0 ou 5.0

Propriedades

Artigo: 299987 - Última revisão: 16 de junho de 2006 - Revisão: 4.2
A informação contida neste artigo aplica-se a:
  • Microsoft Active Server Pages 4.0
Palavras-chave: 
kbmt kbaspobj kbdatabase kbhowtomaster kbsecurity KB299987 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 299987
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.

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