Concernant la question du hotlinking des images, après tout, c'est leur propre travail qui réussit, et beaucoup de gens ne veulent pas que d'autres le volent si facilement. Cette fonction est disponible sur de nombreux forums, peut-être parce qu'il y a trop de comportements de hotlinking.
Le programme anti-sangsue est en fait très simple. Si vous êtes familier avec le cycle de vie des applications ASP.NET, vous pouvez facilement en écrire un. Utilisez simplement HttpModule pour intercepter la requête dans l'événement BeginRequest. Le travail restant consiste à filtrer, puis à filtrer. filtrez à nouveau !
Si vous n'êtes pas familier avec HttpModule, vous pouvez le consulter sur MSDN. L'introduction est très détaillée. L'adresse est : ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80. chs/dv_aspnetcon/html/f1d2910f-61d0-4541-8af8-c3c108ca351f.htm. Plus de bêtises ici
1private void Application_BeginRequest (Object source, EventArgs e)
2{
3 Application HttpApplication = (HttpApplication)source ;
4 Contexte HttpContext = application.Context ;
5 bool isSafe = true ; //Le lien est-il légal ?
6 chaînes uri = context.Request.Url.AbsolutePath.ToLower();
7 if (uri.LastIndexOf(".") > 0 && context.Request.UrlReferrer != null)
8 {
9 chaîne exp = uri.Substring(uri.LastIndexOf("."));
10 //Voici comment déterminer si le suffixe du fichier figure dans la liste des types de fichiers exclus
11 bool isHas = ClassLibrary.RData.RString.StrIsIncUseSC(exp, config.ImgSafeType.Split('|'));
12 si (estHas)
13 {
14 chaînes domainOutter = context.Request.UrlReferrer.Authority.ToLower( //Contient le nom de domaine et le port);
15 ArrayList arry = Common.Cache.GetDomainValid();//Obtenir la liste de liaison des noms de domaine légaux définie par le système
16 isSafe = arry.Contains(domainOutter); //Détermine si le nom de domaine actuellement demandé figure dans la liste légale
17}
18}
19 //Ce qui suit est la sortie lorsqu'elle est illégale. S'il existe une image de remplacement par défaut, elle sera affichée. Sinon, une sera générée au format .gif.
20 si (!isSafe)
vingt-et-un {
22 Bitmap img = nul ;
23 Graphiques g = nul ;
24 MemoryStream ms = nul ;
25
26 essai
27 {
28 chaînes picPath = ClassLibrary.RPath.GetFullDirectory("images/unlawful.gif");
29 si (Fichier.Exists(picPath))
30 {
31 img = nouveau Bitmap(picPath, false);
32}
33 autres
34 {
35 img = nouveau Bitmap (64, 64) ;
36 g = Graphics.FromImage(img);
37 g.Clair (Couleur.Blanc);
38 Police f = new Font("宋体,黑体,Arial", 9,FontStyle.Bold);
39 SolidBrush s = nouveau SolidBrush(Color.Red);
40 g.DrawString(Resources.Message.LawlessLink, f, s, 1, 20) ;
41 img.Save(picPath, ImageFormat.Gif);
42 }
43 ms = nouveau MemoryStream();
44 img.Save(ms, ImageFormat.Gif);
45 contexte.Response.ClearContent();
46 context.Response.ContentType = "image/Gif";
47 context.Response.BinaryWrite(ms.ToArray());
48 contexte.Response.End();
49 }
50 prises
51 { }
52 enfin
53 {
54 si(g != null )
55 g.Dispose();
56 img.Dispose();
57 }
58 }
59}
Tout ce qui est bénéfique doit être nuisible. Le plus gros inconvénient est que cela augmente la surcharge du système. Chaque demande du client doit être filtrée, et les performances seront naturellement compromises. Je ne sais pas si un ami a un meilleur moyen ou une méthode d'optimisation, discutons-en ensemble.
http://www.cnblogs.com/nowind/archive/2007/01/16/622016.html