วิธีจัดการกับม้าโทรจันที่ค้างอยู่ในฐานข้อมูลเว็บไซต์ ASP
ฉันเชื่อว่าหลายๆ คนคงเคยเจอกับฐานข้อมูลที่ถูกแฮ็ก ที่นี่ฉันจะพูดถึงวิธีจัดการกับมัน
ขั้นตอนที่หนึ่ง: สำรองข้อมูลฐานข้อมูลที่มีอยู่ของคุณ
ขั้นตอนที่สอง:
ดำเนินการไฟล์ ASP ต่อไปนี้เพื่อลบ JS Trojan ในฐานข้อมูล:
หมายเหตุ: ฉันเขียน 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,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)),'Put JS Trojan content here',''))
response.write rs(i).name & &rs(i).Type & 'แสดงชื่อฟิลด์ที่ดำเนินการ
สิ้นสุดถ้า
ต่อไป
ตอบกลับเขียน <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 แล้ว
Check_Sqljs=จริง
ออกเพื่อ
สิ้นสุดถ้า
ต่อไป
สิ้นสุดถ้า
ถ้า Request.QueryString<> จากนั้น 'การตรวจจับ QueryString เมื่อส่ง
สำหรับแต่ละ F_Get ใน 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 จากนั้น
Check_Sqljs=จริง
ออกเพื่อ
สิ้นสุดถ้า
ต่อไป
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น CheckDataFrom()'ตรวจสอบแหล่งที่มาของข้อมูลที่ส่ง: True หมายถึงข้อมูลที่ถูกส่งจากภายนอกไซต์
ตรวจสอบ DataFrom=True
server_v1=Cstr(คำขอตัวแปรเซิร์ฟเวอร์(HTTP_REFERER))
server_v2=Cstr (คำขอตัวแปรเซิร์ฟเวอร์ (SERVER_NAME))
ถ้ากลาง (server_v1,8,len(server_v2))<>server_v2 แล้ว
ตรวจสอบ DataFrom=False
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ถ้า Cheack_Sqljs หรือ CheckDataFrom จากนั้น
Response.Write <Script Language=JavaScript>alert('การดำเนินการถูกห้าม การดำเนินการที่ผิดกฎหมาย');</Script>
การตอบสนองสิ้นสุด()
สิ้นสุดถ้า