Considerando que o desenvolvimento ASP pode usar duas linguagens: vbs e js, os códigos dos programas em ambas as linguagens são fornecidos aqui (versão bilíngue? meio YY...) Uma última frase prolixa, a máquina que usei para digitar este artigo não possui um Ambiente ASP, portanto O código fornecido não foi testado e peço desculpas por isso. Se você encontrar algum problema no código, sinta-se à vontade para comentar ~ Eu tenho uma pele dura ~
1. Princípio de ataque
A falsificação de cookies explora principalmente a prática insegura de armazenar informações de login do usuário em cookies por alguns sistemas de gerenciamento de usuários na rede atual. Seu método de ataque é relativamente difícil em comparação com vulnerabilidades como vulnerabilidades de injeção de SQL, mas ainda é muito estúpido.
Sabemos que um sistema de usuário geral baseado em Cookies armazenará pelo menos duas variáveis em Cookies: nome de usuário e nível de usuário, onde nome de usuário é o nome de usuário e nível de usuário é o nível do usuário. Quando nosso navegador acessa uma página ASP, ele envia algo como
OBTER /.../arquivo.asp HTTP 1.0
...
Cookies: nome de usuário=usuário&userlevel=1
...
pacote, então, desde que saibamos o nome de usuário e os valores de nível de usuário do administrador (assumidos como admin e 5 respectivamente), podemos transmitir
OBTER /.../arquivo.asp HTTP 1.0
...
Cookies: nome de usuário=admin&userlevel=5
...
para obter direitos de administrador. Muito simples, não é? No entanto, antes desta vulnerabilidade ser descoberta, quase todos os sistemas de gestão de utilizadores dependiam de cookies.
2. Armazene as informações do usuário com segurança
Como os cookies não são seguros e devemos armazenar as informações de login do usuário, onde elas devem ser armazenadas?
Percebemos que no ASP, além dos Cookies, existe também a Sessão que pode armazenar informações. A sessão é armazenada no servidor e não pode ser alterada casualmente pelo cliente, por isso possui altíssima segurança. Desta forma, você pode substituir todos os códigos de Cookies por Sessão.
3. Armazene informações do usuário por muito tempo
Usando Session para salvar informações de login do usuário, embora elimine o problema de engano de Cookies, a Session não pode ser armazenada por um longo tempo (a sessão padrão do IIS expira 20 minutos após o usuário parar de responder), então o método de armazenamento híbrido Cookies + Session descrito nesta seção é produzido.
Existem duas variantes deste método. A primeira é armazenar o nome de usuário e a senha em Cookies. Caso contrário, os Cookies prevalecerão. será lida e as informações fornecidas nos Cookies serão utilizadas. Faça login de forma opaca com seu nome de usuário e senha para determinar se o conteúdo dos cookies é legal. Se for legal, será armazenado na Sessão. O código para implementar este método é o seguinte:
vbs:
Copie o código do código da seguinte forma:
<%
Escurecer nome de usuário, senha
nome de usuário = Sessão(nome de usuário)
se nome de usuário = então
'Não há informações de login do usuário na sessão
nome de usuário = Request.Cookies(nome de usuário)
senha = Solicitação.Cookies(senha)
'Observe que o nome de usuário e a senha obtidos nas duas frases acima precisam ser evitados contra vulnerabilidades de injeção de SQL (ou seja, aspas simples são filtradas'), que são omitidas aqui.
se nome de usuário = ou senha = então
'O usuário não está logado
...
outro
'Isso pressupõe que os objetos conn e rs foram criados
rs.Open SELECT TOP 1 * FROM [usuário] WHERE nome de usuário=' & nome de usuário & ' AND senha=' & senha & ', conn, 1, 3
se rs.eof então
'As informações contidas nos cookies são ilegais
...
outro
'As informações nos cookies são legais, faça login automaticamente
Sessão(nome de usuário) = nome de usuário
...
terminar se
terminar se
outro
'As informações do usuário já existem na sessão, leia-as diretamente
...
terminar se
%>
js:
Copie o código do código da seguinte forma:
<%
var nome de usuário, senha;
nome de usuário = Sessão(nome de usuário) + ;
if (nome de usuário == || nome de usuário == indefinido) {
//Não há informações do usuário na sessão
nome de usuário = Request.Cookies(nome de usuário) + ;
senha = Solicitação.Cookies(senha) + ;
// Observe que o nome de usuário e a senha obtidos nas duas frases acima precisam evitar vulnerabilidades de injeção de SQL (ou seja, filtrar as aspas simples '), que são omitidas aqui.
if (nome de usuário == || nome de usuário == indefinido || senha == || senha == indefinida) {
//O usuário não está logado
...
}
outro {
// Isso pressupõe que os objetos conn e rs foram criados
rs.Open(SELECIONE TOP 1 * FROM [usuário] WHERE nome de usuário=' + nome de usuário + ' AND senha=' + senha + ', conn, 1, 3);
if (rs.eof) {
//As informações contidas nos Cookies são ilegais
...
}
outro {
//As informações nos Cookies são legais, faça login automaticamente
Sessão(nome de usuário) = nome de usuário + ;
...
}
}
}
outro {
// As informações do usuário já existem na Sessão, leia-as diretamente
...
}
%>
Porém, este método não é muito seguro para os usuários porque o navegador transmitirá Cookies toda vez que eles visitarem a página, e uma vez que os Cookies contendo senhas sejam obtidos por terceiros, a conta do usuário será roubada. Para esta situação, existe um segundo método, que é adicionar um campo verifycode no banco de dados de informações do usuário. Quando o usuário efetua login, um valor de verificação inteiro longo é gerado aleatoriamente e armazenado no campo verifycode, e o nome de usuário e este verifycode. valor é adicionado. Armazene cookies em vez de senha. Ao verificar as informações do usuário em Cookies, apenas o nome de usuário e o código de verificação são verificados. A vantagem desse método é que mesmo que os cookies do usuário sejam obtidos por um hacker, ele só poderá usar o código de verificação gerado temporariamente para fazer login, mas não poderá obter a senha do usuário. Contanto que esse usuário faça login usando o nome de usuário e a senha novamente, o valor do verifycode mudará e os hackers não poderão fazer login através do verifycode original.
A implementação deste método requer apenas pequenas alterações no código do método 1 acima. Primeiro, em seu programa de login, você precisa adicionar um parágrafo onde as informações do usuário são armazenadas após a verificação:
vbs:
Copie o código do código da seguinte forma:
<%
Response.Cookies(verifycode) = int(rnd * 2100000000)
%>
js:
Copie o código do código da seguinte forma:
<%
Response.Cookies(verifycode) = Math.floor(Math.random() * 2100000000);
%>
Em seguida, altere a verificação de Cookies(senha) para a verificação de Cookies(verifycode) no código de verificação fornecido acima.
4. Conclusão
Através da nossa análise e processamento, a vulnerabilidade de falsificação de cookies foi completamente resolvida. Desde então, o nosso programa ASP tornou-se mais seguro.