[등급]도 난 사슬 문제

5711 단어 .netC#
도 난 사슬 의 위 해 는 말 하지 않 겠 습 니 다.인터넷 에 많 습 니 다.
도 킹 원리 직접 분석:httpwatch로 캡 처 한 http 에서 보 낸 데 이 터 를 보 세 요.
GET /Img.ashx?img=svn_work.gif HTTP/1.1 Accept: */* Referer: http://www.svnhost.cn/ Accept-Language: zh-cn UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; CIBA) Host: www.svnhost.cn Connection: Keep-Alive
이 패 킷 은 요청http://www.svnhost.cn/Img.ashx?img=svn_work.gif파일 을 표시 합 니 다.우 리 는 Referer 가 이전 페이지 의 요청 페이지 주소,즉 파일 출처 를 표시 하 는 것 을 볼 수 있다.Host 는 현재 요청 한 호스트 주 소 를 표시 합 니 다.
다음은 체인 데이터 팩 입 니 다.
GET /Img.ashx?img=svn_work.gif HTTP/1.1 Accept: */* Referer: http://745.cc/ Accept-Language: zh-cn UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; CIBA)Host:www.svnhost.cnConnection:Keep-Alive 를 볼 수 있 습 니 다.위의 두 데 이 터 는 같은 파일 에 대한 요청 과정 을 표시 합 니 다.http://www.svnhost.cn/Img.ashx?img=svn_work.gif의 요청 과정 은 Referer 입 니 다.즉,모두 같은 파일 을 요청 하 는 것 이지 만 요청 의 출처 는 다 릅 니 다.따라서 우 리 는 프로그램 에서 현재 서버 에서 유래 한 것 인지 아 닌 지 를 판단 하여 체인 인지 아 닌 지 를 판단 할 수 있다.원 리 를 알 게 된 후 도 난 방지 체인 을 실현 하 는 것 은 매우 간단 하 다.다음은 도 난 방지 체인 으로 시범 을 보 여 드 리 겠 습 니 다.ASP.NET 에 img.ashx 파일 을 추가 한 다음 배경 코드 는 다음 과 같 습 니 다.
using System;
using System.Collections;
using System.Data;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

namespace GetImage
{
    /// <summary>
    /// $codebehindclassname$      
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class Img : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "image/jpg";
            if (context.Request.UrlReferrer != null && context.Request.UrlReferrer.Host.Equals(context.Request.Url.Host, StringComparison.InvariantCultureIgnoreCase))
                context.Response.WriteFile(context.Server.MapPath("~/" + context.Request.QueryString["img"]));
            else
                context.Response.WriteFile(context.Server.MapPath("~/logo.gif"));
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
 
원본 이 비어 있 지 않 고 원본 서버 가 현재 서버 와 일치 하면 도 난 이 아 닌 정상 적 인 접근 임 을 나타 낸다.파일 내용 에 정상적으로 접근 합 니 다.
그렇지 않 으 면 체인 을 훔 쳐 사이트 로고 로 돌아간다.
정확 한 그림 을 무 작위 로 되 돌려 주 고,잘못된 그림 을 무 작위 로 되 돌려 주 거나,정 해진 시간 에 정확 한 그림 을 되 돌려 주 고,정 해진 시간 에 잘못된 그림 을 되 돌려 줄 수도 있다.
그 다음 에 그림 을 사 용 했 습 니 다.이때 그림 을 사용 하면 바로svn_work.gif"/>가 아니 라/Img.ashx?img=svn_work.gif"/>입 니 다.즉,img,ashx 를 통 해 그림 을 읽 는 것 입 니 다.다른 사람 이 체인 을 훔 치면 다음 코드 를 사용 해 야 합 니 다.http://www.svnhost.cn/Img.ashx?img=svn_work.gif"/>.
빨리 자신의 사이트 에 도 난 방지 체인 을 추가 하 세 요!
 
 —————————화려 한 분할 선------------------
 
public class Class1 : IHttpHandler
{
    bool IHttpHandler.IsReusable
    {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
        try
        {
            if (context.Request.UrlReferrer.Host == "localhost1")
            {
                context.Response.Expires = 0;//               0,     。
                context.Response.Clear();//                 
                context.Response.ContentType = "jpg";
                context.Response.WriteFile(context.Request.PhysicalPath);//                        
                context.Response.End();//                          
            }
            else //        ,       ,           
            {
                context.Response.Expires = 0; //               0,     。
                context.Response.Clear();//                 
                context.Response.ContentType = "jpg";//System.Security.Cryptography.Pkcs.ContentInfo.GetContentType("error.jpg"); //      
                context.Response.WriteFile("error.jpg");//                                
                context.Response.End();//                          
            }
        }
        catch (Exception)
        {
        }
    }
}

좋은 웹페이지 즐겨찾기