Was das Thema Hotlinking von Bildern angeht, ist es schließlich die eigene Arbeit, die erfolgreich ist, und viele wollen nicht, dass andere sie so leicht stehlen. Diese Funktion ist in vielen Foren verfügbar, möglicherweise weil es zu viele Hotlinking-Verhaltensweisen gibt.
Das Anti-Leeching-Programm ist eigentlich sehr einfach. Wenn Sie mit dem ASP.NET-Anwendungslebenszyklus vertraut sind, können Sie einfach HttpModule verwenden, um die Anforderung im BeginRequest-Ereignis abzufangen nochmal filtern!
Wenn Sie mit HttpModule nicht vertraut sind, können Sie es auf MSDN nachlesen. Die Adresse lautet: ms-help://MS.VSCC.v80/MS.VisualStudio.v80. chs/dv_aspnetcon/html/f1d2910f-61d0-4541-8af8-c3c108ca351f.htm. Kein Unsinn mehr hier
1private void Application_BeginRequest(Object source, EventArgs e)
2{
3 HttpApplication application = (HttpApplication)source;
4 HttpContext context = application.Context;
5 bool isSafe = true; //Ist der Link legal?
6 string uri = context.Request.Url.AbsolutePath.ToLower();
7 if (uri.LastIndexOf(".") > 0 && context.Request.UrlReferrer != null)
8 {
9 string exp = uri.Substring(uri.LastIndexOf("."));
10 //Hier wird festgestellt, ob das Dateisuffix in der Liste der ausgeschlossenen Dateitypen enthalten ist
11 bool isHas = ClassLibrary.RData.RString.StrIsIncUseSC(exp, config.ImgSafeType.Split('|'));
12 if (isHas)
13 {
14 string domainOutter = context.Request.UrlReferrer.Authority.ToLower(); //Enthält Domänennamen und Port
15 ArrayList arry = Common.Cache.GetDomainValid();// Rufen Sie die vom System definierte Liste der legalen Domänennamenbindungen ab
16 isSafe = arry.Contains(domainOutter); //Bestimmen Sie, ob der aktuell angeforderte Domainname in der legalen Liste enthalten ist
17}
18}
19 // Das Folgende ist die Ausgabe, wenn es ein Standard-Ersatzbild gibt, wird es im Format .gif generiert.
20 if (!isSafe)
einundzwanzig {
22 Bitmap img = null;
23 Grafiken g = null;
24 MemoryStream ms = null;
25
26 Versuche
27 {
28 string picPath = ClassLibrary.RPath.GetFullDirectory("images/unlawful.gif");
29 if (File.Exists(picPath))
30 {
31 img = new Bitmap(picPath, false);
32}
33 sonst
34 {
35 img = neue Bitmap(64, 64);
36 g = Graphics.FromImage(img);
37 g. Klar (Farbe: Weiß);
38 Font f = new Font("宋体,黑体,Arial", 9,FontStyle.Bold);
39 SolidBrush s = new SolidBrush(Color.Red);
40 g.DrawString(Resources.Message.LawlessLink, f, s, 1, 20);
41 img.Save(picPath, ImageFormat.Gif);
42 }
43 ms = new MemoryStream();
44 img.Save(ms, ImageFormat.Gif);
45 context.Response.ClearContent();
46 context.Response.ContentType = "image/Gif";
47 context.Response.BinaryWrite(ms.ToArray());
48 context.Response.End();
49 }
50 Fang
51 { }
52 endlich
53 {
54 if(g != null )
55 g.Dispose();
56 img.Dispose();
57 }
58 }
59}
Alles, was nützlich ist, muss schädlich sein. Der größte Nachteil besteht darin, dass es den Systemaufwand erhöht. Jede Anfrage des Clients muss gefiltert werden, und die Leistung wird natürlich beeinträchtigt. Ich weiß nicht, ob irgendein Freund einen besseren Weg oder eine Optimierungsmethode hat. Lassen Sie uns das gemeinsam besprechen.
http://www.cnblogs.com/nowind/archive/2007/01/16/622016.html