كيفية التعامل مع حصان طروادة المعلق على قاعدة بيانات موقع ASP
أعتقد أن العديد من الأشخاص قد واجهوا اختراق قاعدة البيانات. وهنا سأتحدث عن كيفية التعامل معها.
الخطوة الأولى: عمل نسخة احتياطية لقاعدة البيانات الموجودة لديك.
الخطوة الثانية:
قم بتنفيذ ملف ASP التالي لإزالة حصان طروادة JS في قاعدة البيانات:
ملحوظة: لقد كتبت conn.asp بنفسي.
'ضع محتوى JS Trojan هنا: يرجى تذكر تغييره إلى محتوى JS Trojan في قاعدة البيانات الخاصة بك.
<!--#include file=conn.asp-->
<%
Server.ScriptTimeOut=180
تعيين rstSchema = conn.OpenSchema(20)
ك = 1
افعل حتى rstSchema.EOF 'اجتياز جدول قاعدة البيانات
إذا كان rstSchema(TABLE_TYPE)=TABLE إذن
Response.write K&.<font color=red><b>&rstSchema(TABLE_NAME) & </b></font>: 'عرض اسم الجدول
تعيين rs=Server.CreateObject(ADODB.Recordset)
sql=select * من [ & rstSchema(TABLE_NAME)&]
rs.open SQL، كون، 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 Trojan هنا',''))
Response.write rs(i).name & &rs(i).اكتب & 'اعرض اسم الحقل الذي تم تنفيذه.
نهاية إذا
التالي
استجابة.اكتب <br>
نهاية إذا
rstSchema.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 من الروابط الخارجية في قاعدة البيانات: يشير صحيح إلى اكتشاف حقن JS من الروابط الخارجية.
ديم F_Post،F_Get
Cheack_Sqljs=خطأ
إذا كان Request.Form<> ثم يتم الكشف عند إرسال النموذج
لكل F_Post في نموذج الطلب
إذا (Instr(LCase(Request.Form(F_Post)),<script)<>0 أو Instr(LCase(Request.Form(F_Post)),</script>)<>0) وInstr(LCase(Request.Form (F_Post)),http://)<>0 ثم
Cheack_Sqljs=صحيح
الخروج ل
نهاية إذا
التالي
نهاية إذا
إذا كان Request.QueryString<> ثم يتم اكتشاف QueryString عند الإرسال
لكل F_Get In Request.QueryString
إذا (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()'التحقق من مصدر البيانات المقدمة: صحيح يعني أن البيانات مقدمة من خارج الموقع
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
نهاية إذا
وظيفة النهاية
إذا كان Check_Sqljs أو CheckDataFrom ثم
Response.Write <Script Language=JavaScript>alert('التنفيذ محظور، عملية غير قانونية.');</Script>
الاستجابة. النهاية ()
نهاية إذا