Creo que muchas personas se han encontrado con que la base de datos fue pirateada. Aquí hablaré de cómo lo afronto.
Paso uno: haga una copia de seguridad de su base de datos existente.
Paso dos:
Ejecute el siguiente archivo ASP para eliminar el troyano JS de la base de datos:
Nota: yo mismo escribí conn.asp.
código de programa
'Coloque el contenido del troyano JS aquí: recuerde cambiarlo al contenido del troyano JS en su base de datos.
<!--#include file="conn.asp"-->
<%
Servidor.ScriptTimeOut=180
Establecer primer esquema = conn.OpenSchema (20)
k=1
Hacer hasta rstSchema.EOF 'Atravesar la tabla de la base de datos
Si rstSchema("TABLE_TYPE")="TABLE" Entonces
Response.write K&".<font color=red><b>"&rstSchema("TABLE_NAME") & "</b></font>:" 'Mostrar nombre de tabla
Establecer rs=Server.CreateObject("ADODB.Recordset")
sql="seleccione * de [" & rstSchema("TABLE_NAME")&"]"
rs.open sql, conexión, 1,3
Para i=0 a rs.fields.count-1 'Recorre los campos de la tabla
Si int(rs(i).Type)=129 o int(rs(i).Type)=130 o int(rs(i).Type)=200 o int(rs(i).Type)=201 o int (rs(i).Type)=202 o int(rs(i).Type)=203 Entonces solo procesa campos cuyo tipo de campo es tipo carácter
conn.execute("update ["&rstSchema("TABLE_NAME")&"] set "&rs(i).name&" =replace(cast("&rs(i).name&" as varchar(8000)),'Ponga aquí JS Contenido troyano','')")
Response.write rs(i).name &" "&rs(i).Type &" "'Muestra el nombre del campo ejecutado.
Terminar si
Próximo
respuesta.escribir "<br>"
Terminar si
rstSchema.MoveNext
k=k+1
Bucle
respuesta.Escribe "Ejecución exitosa"
%>
Si hay muchas tablas de base de datos, IIS detendrá el recorrido anterior de la estructura de la base de datos antes de que se complete. En este momento puedes
código de programa
Si rstSchema("TABLE_TYPE")="TABLE" Entonces
Agregue adecuadamente el rango de valores k, como por ejemplo:
código de programa
Si rstSchema("TABLE_TYPE")="TABLE" k>10 y k<20 Entonces
En este caso, sólo se operarán 9 mesas a la vez.
Paso tres:
Según las características de la inyección JS de la base de datos (que incluirá caracteres como <script, </script> y http://),
Coloque el siguiente código en conn.asp:
código de programa
Función Checkack_Sqljs()'Evita la inyección de JS desde enlaces externos en la base de datos: verdadero indica que se descubre la inyección de JS desde enlaces externos.
Atenuar F_Post,F_Get
Check_Sqljs=Falso
Si Request.Form<>"" Entonces' Detección cuando se envía el formulario
Para cada F_Post en Request.Form
Si (Instr(LCase(Request.Form(F_Post)),"<script")<>0 o Instr(LCase(Request.Form(F_Post)),"</script>")<>0) e Instr(LCase (Solicitud.Form(F_Post))," http://")<>0 Entonces
Check_Sqljs=Verdadero
Salir por
Terminar si
Próximo
Terminar si
Si Request.QueryString<>"" Entonces'Detección de QueryString al enviar
Para cada F_Get In Request.QueryString
Si (Instr(LCase(Request.Form(F_Get)),"<script")<>0 o Instr(LCase(Request.Form(F_Get)),"</script>")<>0) e Instr(LCase (Solicitud.Form(F_Get))," http://")<>0 Entonces
Check_Sqljs=Verdadero
Salir por
Terminar si
Próximo
Terminar si
Función final
Función CheckDataFrom()'Verifique la fuente de los datos enviados: Verdadero significa que los datos se envían desde fuera del sitio
CheckDataFrom=Verdadero
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
si mid(server_v1,8,len(server_v2))<>server_v2 entonces
CheckDataFrom=Falso
terminar si
Función final
Si Check_Sqljs o CheckDataFrom Entonces
Response.Write "<Script Language=JavaScript>alert('Ejecución prohibida, operación ilegal.');</Script>"
Respuesta.Fin()
Terminar si