فيما يتعلق بمسألة الارتباط السريع للصور، ففي نهاية المطاف، فإن عملهم هو الذي ينجح، والكثير من الناس لا يريدون أن يسرقه الآخرون بهذه السهولة. تتوفر هذه الوظيفة في العديد من المنتديات، ربما بسبب وجود الكثير من سلوكيات الارتباط السريع.
برنامج مكافحة التسرب بسيط جدًا في الواقع، إذا كنت معتادًا على دورة حياة تطبيق 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(Object source, EventArgs e)
2 {
3 تطبيق HttpApplication = (HttpApplication)source;
4 HttpContext context = application.Context;
5 bool isSafe = true;
6 سلسلة uri = context.Request.Url.AbsolutePath.ToLower();
7 إذا (uri.LastIndexOf(".") > 0 && context.Request.UrlReferrer != null)
8 {
9 string exp = uri.Substring(uri.LastIndexOf("."));
10 // هنا لتحديد ما إذا كانت لاحقة الملف موجودة ضمن قائمة أنواع الملفات المستبعدة
11 bool isHas = ClassLibrary.RData.RString.StrIsIncUseSC(exp, config.ImgSafeType.Split('|'));
12 إذا (isHas)
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 الرسومات ز = فارغة؛
24 MemoryStream ms = null;
25
26 محاولة
27 {
28 سلسلة picPath = ClassLibrary.RPath.GetFullDirectory("images/unlawful.gif");
29 إذا (File.Exists(picPath))
30 {
31 img = new Bitmap(picPath, false);
32}
33 آخر
34 {
35 img = new Bitmap(64, 64);
36g = Graphics.FromImage(img);
37 جم. شفاف (اللون. أبيض)؛
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 مللي ثانية = جديد MemoryStream();
44 img.Save(ms, ImageFormat.Gif);
45 سياق.الاستجابة.ClearContent();
46 context.Response.ContentType = "image/Gif";
47 context.Response.BinaryWrite(ms.ToArray());
48 سياق.الاستجابة.نهاية();
49 }
50 صيد
51 { }
52 أخيرا
53 {
54 إذا(ز!=خالية)
55 جم.التخلص()؛
56 img.Dispose();
57 }
58 }
59}
كل ما هو مفيد يجب أن يكون ضارًا، وأكبر عيب في ذلك هو أنه يزيد من حمل النظام، ويجب تصفية كل طلب من العميل، ومن الطبيعي أن يتعرض الأداء للخطر. لا أعرف إذا كان لدى أي صديق طريقة أو طريقة تحسين أفضل، فلنناقشها معًا.
http://www.cnblogs.com/nowind/archive/2007/01/16/622016.html