Как бороться с троянским конем, висящим в базе данных сайта ASP
Я считаю, что многие люди сталкивались со взломом базы данных. Здесь я расскажу о том, как я с этим справляюсь.
Шаг первый: Сделайте резервную копию существующей базы данных.
Шаг второй:
Запустите следующий файл 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>: 'Отобразить имя таблицы
Установите 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
If Request.Form<> then' Обнаружение при отправке формы
Для каждого 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 Тогда
Cheack_Sqljs=Истина
Выход для
Конец, если
Следующий
Конец, если
Конечная функция
Функция CheckDataFrom()'Проверьте источник отправленных данных: True означает, что данные отправлены из-за пределов сайта.
CheckDataFrom=Истина
server_v1 = Cstr(Request.ServerVariables(HTTP_REFERER))
server_v2 = Cstr(Request.ServerVariables(SERVER_NAME))
если Mid(server_v1,8,len(server_v2))<>server_v2, то
CheckDataFrom=False
конец, если
Конечная функция
Если Cheack_Sqljs или CheckDataFrom Тогда
Response.Write <Script Language=JavaScript>alert('Выполнение запрещено, незаконная операция.');</Script>
Ответ.Конец()
Конец, если