การป้องกัน ASP hotlink เป็นเรื่องที่น่าปวดหัวสำหรับเพื่อนๆ ที่ทำเว็บไซต์โฆษณา Hotlinking ส่งผลร้ายแรงต่อการทำงานปกติของเซิร์ฟเวอร์และเว็บไซต์ การมี Hotlinks เป็นสิ่งจำเป็นมาก บาร์.
หากเราทราบเส้นทางที่แท้จริงของไฟล์คงที่ เช่น http://www.xx.com/download/webjx.pdf และหากเซิร์ฟเวอร์ไม่ได้ตั้งข้อจำกัดพิเศษใดๆ เราก็สามารถดาวน์โหลดได้อย่างง่ายดาย! เมื่อเว็บไซต์ให้บริการดาวน์โหลด webjx.pdf เราจะป้องกันไม่ให้ผู้ดาวน์โหลดรับเส้นทางที่แท้จริงของเขาได้อย่างไร บทความนี้จะแนะนำวิธีใช้ Asp เพื่อซ่อนเส้นทางการดาวน์โหลดไฟล์จริง
เมื่อเราจัดการไฟล์เว็บไซต์ เราสามารถใส่ไฟล์ที่มีนามสกุลเดียวกันในไดเร็กทอรีเดียวกันและตั้งชื่อพิเศษให้กับไฟล์เหล่านั้นได้ ตัวอย่างเช่น ไดเร็กทอรีไฟล์ pdf คือ the_pdf_file_s และโค้ดต่อไปนี้จะถูกบันทึกเป็น down.asp และเส้นทางออนไลน์ของไฟล์ คือ http.://www.xx.com/down.asp เราสามารถใช้ http://www.xx.com/down.asp?FileName=webjx.pdf เพื่อดาวน์โหลดไฟล์นี้ และผู้ดาวน์โหลดจะไม่เห็นไฟล์นี้ เส้นทางการดาวน์โหลดจริง! ใน down.asp เรายังสามารถตั้งค่าได้ว่าจำเป็นต้องเข้าสู่ระบบเพื่อดาวน์โหลดไฟล์หรือไม่ และกำหนดว่าหน้าต้นฉบับที่ดาวน์โหลดนั้นเป็นเว็บไซต์ภายนอกหรือไม่ จึงทำให้ไม่สามารถเชื่อมโยงไฟล์ได้
- From_url = Cstr (คำขอตัวแปรเซิร์ฟเวอร์ (HTTP_REFERER)) Serv_url = Cstr (คำขอตัวแปรเซิร์ฟเวอร์ (SERVER_NAME)) ถ้ากลาง (From_url,8,len(Serv_url)) <> Serv_url แล้ว response.write ลิงก์ผิดกฎหมาย! ''ป้องกันฮอตลิงก์ การตอบสนองสิ้นสุด สิ้นสุดถ้า ถ้า Request.Cookies(Logined)= แล้ว response.redirect /login.asp ''ต้องเข้าสู่ระบบ! สิ้นสุดถ้า ฟังก์ชัน GetFileName(ชื่อยาว)''/folder1/folder2/file.asp=>file.asp ในขณะที่ instr(ชื่อยาว,/) ชื่อยาว = ขวา (ชื่อยาว, เลน (ชื่อยาว) -1) เวน GetFileName = ชื่อยาว ฟังก์ชันสิ้นสุด สตรีมสลัว เนื้อหาสลัว ชื่อไฟล์ติ่มซำ Dim TrueFileName Dim FileExt ค่าคงที่ adTypeBinary = 1 FileName = Request.QueryString(ชื่อไฟล์) ถ้า FileName = จากนั้น Response.Write ชื่อไฟล์ไม่ถูกต้อง! การตอบสนองสิ้นสุด จบถ้า FileExt = กลาง (ชื่อไฟล์, InStrRev (ชื่อไฟล์, .) + 1) เลือกกรณี UCase(FileExt) กรณี ASP, ASA, ASPX, ASAX, MDB ตอบกลับ เขียนการดำเนินการที่ผิดกฎหมาย! การตอบสนองสิ้นสุด สิ้นสุดการเลือก การตอบสนองชัดเจน ถ้า lcase(right(FileName,3))=gif หรือ lcase(right(FileName,3))=jpg หรือ lcase(right(FileName,3))=png แล้ว Response.ContentType = image/* ''ไม่มีกล่องโต้ตอบการดาวน์โหลดปรากฏขึ้นสำหรับไฟล์รูปภาพ อื่น Response.ContentType = แอปพลิเคชัน/ms-ดาวน์โหลด สิ้นสุดถ้า Response.AddHeader การจัดการเนื้อหา ชื่อไฟล์แนบ = & GetFileName (Request.QueryString (FileName)) ตั้งค่าสตรีม = server.createObject (ADODB.Stream) Stream.Type = adTypeBinary สตรีม.เปิด ถ้า lcase(right(FileName,3))=pdf ให้ตั้งค่าไดเร็กทอรีไฟล์ประเภท pdf TrueFileName = /the_pdf_file_s/&FileName สิ้นสุดถ้า ถ้า lcase(right(FileName,3))=doc ดังนั้น ''ตั้งค่าไดเร็กทอรีไฟล์ประเภท DOC TrueFileName = /my_D_O_C_file/&FileName สิ้นสุดถ้า ถ้า lcase(right(FileName,3))=gif หรือ lcase(right(FileName,3))=jpg หรือ lcase(right(FileName,3))=png แล้ว TrueFileName = /all_images_/&FileName ''ตั้งค่าไดเร็กทอรีไฟล์รูปภาพ สิ้นสุดถ้า Stream.LoadFromFile Server.MapPath (TrueFileName) ในขณะที่ไม่ได้สตรีม EOS การตอบสนองกระแสข้อมูล BinaryWrite อ่าน (1024 * 64) เวนด์ สตรีมปิด ตั้งค่าสตรีม = ไม่มีเลย การตอบสนองฟลัช การตอบสนองสิ้นสุด - |