Recomendado: Falando sobre o diretório de árvores do DHTML XML ASP CSS O diretório de árvores exibe o Programa Descrição do Problema: As tabelas de dados auto-associadas geralmente aparecem em nossos projetos. Se olharmos para eles da perspectiva geral, a tabela inteira será apresentada como uma estrutura de dados de árvore (para casos complexos, pode se tornar um gráfico). Quando fazemos esta tabela
Na programação ASP, pode -se dizer que a autenticação de identidade é frequentemente usada. Mas como podemos obter segurança de autenticação?
Página de envio de formulário: sub.htm
| A seguir, o conteúdo citado: <html> <head> <title> Login do administrador </Title> <Body> <nome de forma = form1 método = pós -ação = sub.asp> <p> Administrador: <Tipo de entrada = nome do texto = tamanho 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 enviado = Enviar> </p> </morm> </body> </html> |
| A seguir, o conteúdo citado: Programa Sub.asp <% Receber dados do formulário usuário = request.from (userID) Verifique se os dados enviados no formulário estão vazios (a página do formulário pode ser controlada por JavaScript ou VBScript, mas não se esqueça de controlá -lo aqui! Se usuário = então Vá para a página Prompt de erro! Response.Redirect err1.htm Esta frase pode ser inútil, mas é melhor adicioná -la! resposta.END final se pass = request.From (Pass) se passar = então Response.Redirect err2.htm resposta.END final se Junte -se ao banco de dados arquivo = server.mappath (seu banco de dados) Definir Conn = Server.CreateObject (Adodb.Connection) dr = driver = {Microsoft Access Driver (*.mdb)}; dbq = & arquivo Conn.Open dr set rs = server.createObject (adodb.recordset) A chave é a linguagem SQL aqui sql = selecione * da tabela onde usuário = & user & e passa = & pass & Rs.open sql se não Rs.eof então Se encontrado, vá para a página de gerenciamento REPOnse.Redirect Login.asp outro Se não for encontrado, digite a página de erro Response.write err3.htm final se %> |
Todo mundo sente que o código acima deve estar bem, mas aqui está um sério risco de segurança:
Se eu quiser fazer login no administrador, posso inseri -lo na caixa de entrada do formulário sub.htm:
Digite na primeira caixa de texto: a ou 1 = 1 ou ou = =
Digite na segunda caixa de texto: a ou 1 = 1 ou ou = =
Envie -o, você verá ... Woo, me escute, é bom terminar, os tijolos serão jogados de novo ...
a e 1 são personagens
Alguém pode perguntar por que você insere esses personagens como administrador? ?
De fato, esses personagens são um engano para o idioma SQL em seu programa e inseridos com sucesso.
Todo mundo vê: Inicie o programa SQL é um registro que consulta a tabela e atende ao usuário = & User & and Pass = & Pass & Condition.
sql = selecione * da tabela onde usuário = & user & e passa = & pass &
Eu digitei o código acima e ele se tornou:
sql = selecione * da tabela onde o usuário = a ou 1 = 1 e passa = a ou 1 = 1
Vamos dar uma olhada, pode haver um motivo para não entrar? ? Dê -me um motivo para não entrar, primeiro!
O campo de passagem do usuário acima é do tipo de caractere e, se for um tipo numérico, o mesmo é verdadeiro!
Solução:
1. Método alternativo da função:
Use Substitua para substituir a entrada de conteúdo pelo usuário por caracteres especiais para alcançar o objetivo de controle! sql = selecione * da tabela onde o usuário = e substitua (usuário ,,) & e passa = & substitua (passa ,,) &
Este método pode substituir apenas um caractere de cada vez. De fato, os caracteres perigosos não são apenas, mas também personagens como>, <, &, % devem ser totalmente controlados. Mas o que devo fazer se não parecer competente com a função de substituição? ?
2. Método de controle de programa
Use o programa para controlar todo o conteúdo inserido pelo cliente, para que você possa controlar completamente quaisquer caracteres ou códigos perigosos possíveis inseridos pelo cliente. Eu farei esse método!
| A seguir, o conteúdo citado: <% Capturar o conteúdo do formulário enviado pelo usuário usuário = request.From (usuário) pass = request.From (Pass) ... O controle do ciclo começa para i = 1 a len (usuário) Use a função média para ler um personagem na posição I no usuário variável nós = médio (usuário, i, 1) Comparação de personagens de leitura se nós = ou nós =% ou nós = <ou nós => ou nós = & então Se os caracteres acima estiverem contidos, ocorrerá uma mensagem de erro. Os caracteres especiais acima não podem ser contidos. Response.Redirect err2.htm resposta.END final se próximo ... %> |
Compartilhar: analisar os procedimentos ASP e armazenados Existem muitos artigos sobre procedimentos ASP e armazenados, mas duvido que os autores realmente o pratiquem. Eu li muitas informações relevantes quando estava no começo e descobri que muitos dos métodos fornecidos não eram o caso na prática. Para aplicações simples, este