Na programação ASP, pode-se dizer que a autenticação de identidade é comumente usada. Mas como podemos alcançar segurança de autenticação?
Página de envio do formulário: sub.htm
<html>
<cabeça>
<title>Login de administrador</title>
<corpo>
<nome do formulário=form1 método=post action=sub.asp>
<p>Administrador:
<tipo de entrada=nome do texto=tamanho do ID do usuário=25 maxlength=20>
senha:
<tipo de entrada=nome do texto=Tamanho do passe=12 maxlength=20>
<tipo de entrada=nome de envio=Valor de envio=Enviar>
</p>
</form>
</body>
</html>
Programa SUB.asp
<%
Receber dados do formulário
usuário=request.from(UserID)
Verifique se os dados enviados pelo formulário estão vazios (você pode usar JAVASCRIPT ou VBSCRIPT para controlar a página do formulário, mas não esqueça de controlá-la aqui!
se usuário = então
Vá para a página da mensagem de erro!
resposta.redirect err1.htm
Esta frase pode não ser útil, mas é bom adicioná-la!
resposta.fim
terminar se
pass=request.from(Passe)
se passar = então
resposta.redirect err2.htm
resposta.fim
terminar se
Junte-se ao banco de dados
arquivo=server.mappath(seu banco de dados)
definir conn=server.createobject(adodb.connection)
dr=driver={driver de acesso microsoft (*.mdb)};dbq=&arquivo
conn.open dr
definir rs=server.createobject(adodb.recordset)
A chave é a linguagem SQL aqui
sql=select * da tabela onde user= &user& e pass= &pass&
rs.opensql
se não rs.eof então
Se você encontrar, vá para a página de gerenciamento.
resposta.redirect login.asp
outro
Se não for encontrado, você entrará em uma página de erro.
resposta.write err3.htm
terminar se
%>
Todos acham que o código acima deveria servir, mas há um sério risco de segurança aqui:
Se eu quiser fazer login como administrador, posso inserir na caixa de entrada do formulário SUb.htm:
Digite na primeira caixa de texto: a ou 1 = 1 ou OR =
Digite na segunda caixa de texto: a ou 1 = 1 ou OR =
Envie, todo mundo vai ver... Ah, me escute, ok, vou jogar os tijolos mais tarde...
a e 1 são quaisquer caracteres
Algumas pessoas podem perguntar por que você insere esses caracteres para entrar como administrador? ?
Na verdade, esses caracteres são usados para enganar a linguagem SQL em seu programa e entrar com sucesso.
Como você pode ver: no programa SQL inicial, a tabela é consultada em busca de registros que satisfaçam as condições user= &user& e pass= &pass&.
sql=select * da tabela onde user= &user& e pass= &pass&
Depois de inserir o código acima, ficou:
sql=select * da tabela onde user= a ou 1 = 1 e pass= a ou 1 = 1
Vamos dar uma olhada. Existe algum motivo para não entrar? ? Dê-me um motivo para não entrar, primeiro!
O campo USER PASS acima é do tipo caractere e o mesmo vale se for do tipo numérico!
Solução:
1. Método de substituição de função:
Use REPLACE para substituir caracteres especiais contidos no conteúdo inserido pelo usuário para atingir fins de controle! sql=select * da tabela onde user= &replace(user, , )& e pass= &replace(pass, , )&
Este método só pode substituir um caractere por vez. Na verdade, não apenas caracteres perigosos, mas também caracteres como >, <, &, %, etc. Mas o que devo fazer se não conseguir usar a função REPLACE? ?
2. Método de controle do programa
Use um programa para controlar todo o conteúdo inserido pelo cliente, para que quaisquer possíveis caracteres ou códigos perigosos inseridos pelo usuário possam ser totalmente controlados.
<%
Capture o conteúdo do formulário enviado pelo usuário
usuário = solicitação.from (usuário)
pass=request.from(pass)
...
O controle de loop é iniciado
para i=1 para len(usuário)
Use a função MID para ler um caractere na posição i na variável user
us=mid(usuário,i,1)
Comparar caracteres lidos
se us= ou us=% ou us=< ou us=> ou us=& então
Se contiver os caracteres acima, aparecerá uma mensagem de erro. Não pode conter os caracteres especiais acima.
resposta.redirect err2.htm
resposta.fim
terminar se
próximo
...
%>