Como lidar com o cavalo de Tróia pendurado no banco de dados do site ASP
Acredito que muitas pessoas encontraram o banco de dados sendo hackeado. Aqui vou falar sobre como lidei com isso.
Passo um: Faça um backup do seu banco de dados existente.
Etapa dois:
Execute o seguinte arquivo ASP para remover o Trojan JS do banco de dados:
Nota: eu mesmo escrevi conn.asp.
'Coloque o conteúdo do Trojan JS aqui: lembre-se de alterá-lo para o conteúdo do Trojan JS em seu banco de dados.
<!--#include arquivo=conn.asp-->
<%
Servidor.ScriptTimeOut=180
Definir rstSchema = conn.OpenSchema(20)
k = 1
Do Until rstSchema.EOF 'Percorre a tabela do banco de dados
Se rstSchema(TABLE_TYPE)=TABLE Então
response.write K&.<font color=red><b>&rstSchema(TABLE_NAME) & </b></font>: 'Exibir nome da tabela
Definir rs=Server.CreateObject(ADODB.Recordset)
sql=selecione * de [ & rstSchema(TABLE_NAME)&]
rs.open sql,conn,1,3
For i=0 to rs.fields.count-1 'Percorre os campos da tabela
Se int(rs(i).Type)=129 ou int(rs(i).Type)=130 ou int(rs(i).Type)=200 ou int(rs(i).Type)=201 ou int (rs(i).Type)=202 ou int(rs(i).Type)=203 Then' processa apenas campos cujo tipo de campo é tipo de caractere
conn.execute(update [&rstSchema(TABLE_NAME)&] set &rs(i).name& =replace(cast(&rs(i).name& as varchar(8000)),'Coloque o conteúdo do Trojan JS aqui',''))
response.write rs(i).name & &rs(i).Type & 'Exibe o nome do campo executado.
Terminar se
Próximo
resposta.write <br>
Terminar se
rstSchema.MoveNext
k=k+1
Laço
resposta.Write executada com sucesso
%>
Se houver muitas tabelas de banco de dados, a passagem acima da estrutura do banco de dados será interrompida pelo IIS antes de ser concluída. Neste momento você pode
Se rstSchema(TABLE_TYPE)=TABLE Então
Adicione apropriadamente o intervalo de valores k, como:
Se rstSchema(TABLE_TYPE)=TABLE k>10 e k<20 Então
Neste caso, serão operadas apenas 9 mesas por vez.
Etapa três:
De acordo com as características da injeção JS do banco de dados (que incluirá caracteres como <script, </script> e http://),
Coloque o seguinte código em conn.asp:
Função Cheack_Sqljs()'Impede a injeção de JS de links externos no banco de dados: true indica que a injeção de JS de links externos foi descoberta.
Dim F_Post,F_Get
Cheack_Sqljs=Falso
If Request.Form<> Then' Detecção quando o formulário é enviado
Para cada F_Post em Request.Form
If (Instr(LCase(Request.Form(F_Post)),<script)<>0 ou Instr(LCase(Request.Form(F_Post)),</script>)<>0) e Instr(LCase(Request.Form (F_Post)),http://)<>0 Então
Check_Sqljs = Verdadeiro
Sair para
Terminar se
Próximo
Terminar se
If Request.QueryString<> Then'Detecção de QueryString no envio
Para cada F_Get em Request.QueryString
If (Instr(LCase(Request.Form(F_Get)),<script)<>0 ou Instr(LCase(Request.Form(F_Get)),</script>)<>0) e Instr(LCase(Request.Form (F_Get)),http://)<>0 Então
Check_Sqljs = Verdadeiro
Sair para
Terminar se
Próximo
Terminar se
Função final
Função CheckDataFrom()'Verifica a fonte dos dados enviados: True significa que os dados são enviados de fora do site
CheckDataFrom = Verdadeiro
server_v1=Cstr(Request.ServerVariables(HTTP_REFERER))
server_v2=Cstr(Request.ServerVariables(SERVER_NAME))
se mid(servidor_v1,8,len(servidor_v2))<>servidor_v2 então
CheckDataFrom=Falso
terminar se
Função final
Se Cheack_Sqljs ou CheckDataFrom Then
Response.Write <Script Language=JavaScript>alert('Execução proibida, operação ilegal.');</Script>
Resposta.End()
Terminar se