Я считаю, что многие люди сталкивались со взломом базы данных. Здесь я расскажу о том, как я с этим справляюсь.
Шаг первый: Сделайте резервную копию существующей базы данных.
Шаг второй:
Выполните следующий файл ASP, чтобы удалить троян JS из базы данных:
Примечание. Я сам написал conn.asp.
программный код
'Поместите сюда содержимое JS-трояна: не забудьте изменить его на содержимое JS-трояна в вашей базе данных.
<!--#include file="conn.asp"-->
<%
Сервер.ScriptTimeOut=180
Установите rstSchema = conn.OpenSchema(20)
к=1
Do Until rstSchema.EOF 'Обход таблицы базы данных
Если rstSchema("TABLE_TYPE")="TABLE" Тогда
response.write K&".<font color=red><b>"&rstSchema("TABLE_NAME") & "</b></font>:" 'Отобразить имя таблицы
Set rs=Server.CreateObject("ADODB.Recordset")
sql="выбрать * из [" & rstSchema("TABLE_NAME")&"]"
rs.open sql,conn,1,3
От i=0 до rs.fields.count-1 'Обход полей таблицы
Если int(rs(i).Type)=129 или int(rs(i).Type)=130 или int(rs(i).Type)=200 или int(rs(i).Type)=201 или int (rs(i).Type)=202 или int(rs(i).Type)=203 Тогда обрабатываются только поля, тип поля которых является символьным.
conn.execute("update ["&rstSchema("TABLE_NAME")&"] set "&rs(i).name&" =replace(cast("&rs(i).name&" as varchar(8000)),'Поместите сюда JS Троянский контент','')")
response.write rs(i).name &" "&rs(i).Type &" "'Отображает имя выполненного поля.
Конец, если
Следующий
ответ.напишите "<br>"
Конец, если
рстсхема.MoveNext
к=к+1
Петля
ответ. Напишите «Выполнение успешное».
%>
Если таблиц базы данных много, описанный выше обход структуры базы данных будет остановлен IIS до его завершения. В это время вы можете
программный код
Если rstSchema("TABLE_TYPE")="TABLE" Тогда
Соответствующим образом добавьте диапазон значений k, например:
программный код
Если rstSchema("TABLE_TYPE")="TABLE" k>10 и k<20 Тогда
В этом случае одновременно будут работать только 9 столов.
Шаг третий:
В соответствии с характеристиками JS-инъекции базы данных (которая будет включать такие символы, как <script, </script> и http://),
Поместите следующий код в conn.asp:
программный код
Функция Cheack_Sqljs()' Предотвращает внедрение JS из внешних ссылок в базе данных: значение true указывает на обнаружение внедрения JS из внешних ссылок.
Тусклый F_Post, F_Get
Cheack_Sqljs=False
Если Request.Form<>"" Тогда' Обнаружение при отправке формы
Для каждого F_Post в Request.Form
If (Instr(LCase(Request.Form(F_Post)),"<script")<>0 или Instr(LCase(Request.Form(F_Post)),"</script>")<>0) и Instr(LCase (Request.Form(F_Post))," http://")<>0 Тогда
Check_Sqljs=Истина
Выход для
Конец, если
Следующий
Конец, если
If Request.QueryString<>"" then'Обнаружение QueryString при отправке
Для каждого F_Get в Request.QueryString
If (Instr(LCase(Request.Form(F_Get)),"<script")<>0 или Instr(LCase(Request.Form(F_Get)),"</script>")<>0) и Instr(LCase (Request.Form(F_Get))," http://")<>0 Тогда
Check_Sqljs=Истина
Выход для
Конец, если
Следующий
Конец, если
Конечная функция
Функция CheckDataFrom()'Проверьте источник отправленных данных: True означает, что данные отправлены из-за пределов сайта.
CheckDataFrom=Истина
server_v1 = Cstr(Request.ServerVariables("HTTP_REFERER"))
server_v2 = Cstr(Request.ServerVariables("ИМЯ_СЕРВЕРА"))
если Mid(server_v1,8,len(server_v2))<>server_v2, то
CheckDataFrom=False
конец, если
Конечная функция
Если Cheack_Sqljs или CheckDataFrom Тогда
Response.Write "<Script Language=JavaScript>alert('Выполнение запрещено, незаконная операция.');</Script>"
Ответ.Конец()
Конец, если