ส่วนเรื่อง hotlinking รูปภาพ ก็เป็นผลงานของตัวเองที่ประสบความสำเร็จ และหลายๆ คนก็ไม่อยากให้คนอื่นขโมยไปง่ายๆ เช่นกัน ฟังก์ชั่นนี้มีอยู่ในหลายฟอรั่ม อาจเป็นเพราะพฤติกรรมฮอตลิงก์มากเกินไป
โปรแกรมป้องกันการปลิงนั้นง่ายมาก หากคุณคุ้นเคยกับวงจรชีวิตของแอปพลิเคชัน ASP.NET คุณสามารถเขียนโปรแกรมได้อย่างง่ายดาย เพียงใช้ HttpModule เพื่อสกัดกั้นคำขอในเหตุการณ์ BeginRequest งานที่เหลือคือการกรอง กรองอีกแล้ว!
หากคุณไม่คุ้นเคยกับ HttpModule คุณสามารถตรวจสอบได้ใน MSDN ที่อยู่นี้มีรายละเอียดมาก: ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80 chs/dv_aspnetcon/html/f1d2910f- 61d0-4541-8af8-c3c108ca351f.htm. ไม่มีเรื่องไร้สาระอีกต่อไปที่นี่
1private void Application_BeginRequest (แหล่งที่มาของวัตถุ, EventArgs e)
2{
3 แอปพลิเคชัน HttpApplication = (HttpApplication) แหล่งที่มา;
4 บริบท HttpContext = แอปพลิเคชัน บริบท;
5 bool isSafe = true; // ลิงก์นี้ถูกกฎหมายหรือไม่
6 สตริง uri = context.Request.Url.AbsolutePath.ToLower();
7 ถ้า (uri.LastIndexOf(".") > 0 && context.Request.UrlReferrer != null)
8 {
9 สตริง exp = uri.Substring(uri.LastIndexOf("."));
10 //นี่คือเพื่อตรวจสอบว่าคำต่อท้ายไฟล์อยู่ในรายการประเภทไฟล์ที่ยกเว้นหรือไม่
11 บูล isHas = ClassLibrary.RData.RString.StrIsIncUseSC(exp, config.ImgSafeType.Split('|'));
12 ถ้า (คือมี)
13 {
14 สตริง domainOutter = context.Request.UrlReferrer.Authority.ToLower(); // ประกอบด้วยชื่อโดเมนและพอร์ต
15 ArrayList arry = Common.Cache.GetDomainValid();//รับรายการรวมชื่อโดเมนตามกฎหมายที่กำหนดโดยระบบ
16 isSafe = arry.Contains(domainOutter); //ตรวจสอบว่าชื่อโดเมนที่ร้องขอในปัจจุบันอยู่ในรายการทางกฎหมายหรือไม่
17}
18}
19 //ต่อไปนี้คือผลลัพธ์เมื่อมันผิดกฎหมาย หากมีการแทนที่อิมเมจเริ่มต้น อิมเมจจะถูกสร้างออกมาในรูปแบบ .gif
20 ถ้า (!ปลอดภัย)
ยี่สิบเอ็ด {
22 บิตแมป img = null;
23 กราฟิก g = null;
24 MemoryStream ms = null;
25
26 พยายาม
27 {
28 สตริง picPath = ClassLibrary.RPath.GetFullDirectory("images/unlawful.gif");
29 ถ้า (File.Exists(picPath))
30 {
31 img = บิตแมปใหม่ (picPath, false);
32}
33 อื่น ๆ
34 {
35 img = บิตแมปใหม่ (64, 64);
36 g = Graphics.FromImage (img);
37 ก.ใส(สีขาว);
38 แบบอักษร f = แบบอักษรใหม่ ("宋体,黑体,Arial", 9,FontStyle.Bold);
39 SolidBrush s = SolidBrush ใหม่ (Color.Red);
40 g.DrawString(Resources.Message.LawlessLink, f, s, 1, 20);
41 img.บันทึก(picPath, ImageFormat.Gif);
42 }
43 ms = MemoryStream ใหม่ ();
44 img.บันทึก(ms, ImageFormat.Gif);
45 บริบทการตอบสนองClearContent();
46 context.Response.ContentType = "รูปภาพ/Gif";
47 บริบทการตอบสนองBinaryWrite(ms.ToArray());
48 บริบทการตอบสนองสิ้นสุด ();
49 }
50 จับ
51 { }
52 ในที่สุด
53 {
54 ถ้า(g != null )
55 ก.ทิ้ง();
56 img.ทิ้ง();
57 }
58 }
59}
ทุกสิ่งที่เป็นประโยชน์จะต้องเป็นอันตราย ข้อเสียที่ใหญ่ที่สุดคือมันเพิ่มค่าใช้จ่ายของระบบ ทุกๆ คำขอจากไคลเอนต์จะต้องถูกกรอง และประสิทธิภาพจะถูกบุกรุกโดยธรรมชาติ ฉันไม่รู้ว่าเพื่อนคนไหนมีวิธีที่ดีกว่านี้หรือมีวิธีเพิ่มประสิทธิภาพไหม มาพูดคุยกัน
http://www.cnblogs.com/nowind/archive/2007/01/16/622016.html