사진 핫링크 문제는 결국 자신의 작업이 성공하기 때문에 많은 사람들이 다른 사람이 쉽게 훔치는 것을 원하지 않습니다. 이 기능은 많은 포럼에서 사용할 수 있습니다. 아마도 핫링크 동작이 너무 많기 때문일 것입니다.
안티 리칭 프로그램은 실제로 매우 간단합니다. 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)소스;
4 HttpContext 컨텍스트 = application.Context;
5 bool isSafe = true; //링크가 합법적인가요?
6 문자열 uri = context.Request.Url.AbsolutePath.ToLower();
7 if (uri.LastIndexOf(".") > 0 && context.Request.UrlReferrer != null)
8 {
9 문자열 exp = uri.Substring(uri.LastIndexOf("."));
10 //여기서 파일 접미사가 제외된 파일 형식 목록에 있는지 확인합니다.
11 bool isHas = ClassLibrary.RData.RString.StrIsIncUseSC(exp, config.ImgSafeType.Split('|'));
12 if (isHas)
13 {
14 string domainOutter = context.Request.UrlReferrer.Authority.ToLower() //도메인 이름과 포트를 포함합니다.
15 ArrayList arry = Common.Cache.GetDomainValid();//시스템에서 정의한 합법적인 도메인 이름 바인딩 목록 가져오기
16 isSafe = arry.Contains(domainOutter); //현재 요청한 도메인 이름이 합법적인 목록에 있는지 확인합니다.
17}
18}
19 //불법일 경우 출력되는 내용은 다음과 같습니다. 기본 대체 이미지가 있는 경우 .gif 형식으로 생성됩니다.
20 if (!isSafe)
스물 하나 {
22 비트맵 img = null;
23 그래픽 g = null;
24 메모리스트림 ms = null;
25
26번 시도
27 {
28 문자열 picPath = ClassLibrary.RPath.GetFullDirectory("images/unlawful.gif");
29 if (파일.존재(picPath))
30 {
31 img = new Bitmap(picPath, false);
32}
그 외 33개
34 {
35 img = 새 비트맵(64, 64);
36g = 그래픽.FromImage(img);
37g.투명(색상.흰색);
38 글꼴 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 }
43ms = 새로운 MemoryStream();
44 img.저장(ms, ImageFormat.Gif);
45 컨텍스트.응답.ClearContent();
46 context.Response.ContentType = "이미지/Gif";
47 context.Response.BinaryWrite(ms.ToArray());
48 컨텍스트.응답.끝();
49 }
50 캐치
51 { }
마침내 52
53 {
54 if(g != null )
55g.Dispose();
56 img.Dispose();
57 }
58 }
59}
유익한 것은 모두 해로울 수밖에 없습니다. 이것의 가장 큰 단점은 시스템 오버헤드를 증가시킨다는 것입니다. 클라이언트의 모든 요청은 필터링되어야 하며 성능은 자연스럽게 저하됩니다. 더 나은 방법이나 최적화 방법이 있는 친구가 있는지는 모르겠지만 함께 논의해 봅시다.
http://www.cnblogs.com/nowind/archive/2007/01/16/622016.html