Asp.Net Core는 중간부품을 통해 이미지 해킹을 방지합니다.

5090 단어
원리
도난 방지 체인을 실현하려면 우리는 먼저 도난 방지체인의 실현 원리를 이해해야 한다. 도난 방지 체인의 실현 원리를 언급하면 HTTP 프로토콜에서 HTTP 프로토콜에 리퍼러라는 표두 필드가 있는데 URL의 형식으로 현재의 웹 페이지나 문서가 어디로 연결되었는지 표시해야 한다.다시 말하면referer를 통해 사이트는 목표 웹 페이지가 방문한 원본 웹 페이지를 탐지할 수 있고 자원 파일이라면 웹 주소를 표시할 수 있다.referer 추적 원본이 있으면 처리하기 쉽습니다. 이 때 기술적인 수단을 통해 처리할 수 있습니다. 원본이 원본이 아닌 것을 발견하면 차단하거나 지정한 페이지로 되돌아갈 수 있습니다.자신의 사이트를 도난 방지 체인으로 보호하려면 상황에 따라 차별화해야 한다.만약에 사이트 서버가 아파치를 사용한다면 아파치가 자체로 가지고 있는 Url Rewrite 기능을 사용하면 각종 체인을 쉽게 방지할 수 있다. 그 원리도 레퍼를 검사하는 것이다. 만약에 레퍼의 정보가 다른 사이트에서 왔다면 지정된 그림이나 페이지로 방향을 바꿀 수 있다.만약 서버가 IIS를 사용한다면 제3자 플러그인을 통해 도난 방지 체인 기능을 실현해야 한다. 현재 비교적 자주 사용하는 제품은 ISAPIRewrite는 아파치와 유사한 도난 방지 체인 기능을 실현할 수 있다.또한 포럼의 경우'로그인 검증'방법으로 도난 방지 체인을 사용할 수 있다.
 
2. 도난 방지 체인 실현
지금 ASP에서NET Core에서 도난 방지 체인 기술을 구현하여 우리의 응용 프로그램과 사이트 파일을 보호합니다.ASP를 통과해야 합니다.NET Core의 중간부품 기술은 모든 들어오는 요청을 감청하고 처리하며, 이 요청이 우리 프로그램에서 온 것인지 확인합니다.
이 도난 방지 체인의 중간부품 프로그램을 만듭니다.
public class HotlinkingPreventionMiddleware
{
    private readonly string _wwwrootFolder;
    private readonly RequestDelegate _next;

    public HotlinkingPreventionMiddleware(RequestDelegate next, IHostingEnvironment env)
    {
        _wwwrootFolder = env.WebRootPath;
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        var applicationUrl = $"{context.Request.Scheme}://{context.Request.Host.Value}";
        var headersDictionary = context.Request.Headers;
        var urlReferrer = headersDictionary[HeaderNames.Referer].ToString();

        if(!string.IsNullOrEmpty(urlReferrer) && !urlReferrer.StartsWith(applicationUrl))
        {
            var unauthorizedImagePath = Path.Combine(_wwwrootFolder,"Images/Unauthorized.png");
                
            await context.Response.SendFileAsync(unauthorizedImagePath);
        }
            
        await _next(context);
    }
}

 
이 중간부품에서 우리는 ASP를 볼 수 있다.NET Core의 Request 객체가 Referrer에 봉인되지 않았습니다. 가져오려면 Referrer, HTTP (Headers) 。일반적으로 하나의 IApplicationBuilder 확장이 필요합니다.
public static class BuilderExtensions
{
    public static IApplicationBuilder UseHotlinkingPreventionMiddleware(this IApplicationBuilder app)
    {
        return app.UseMiddleware();
    }
}

마지막으로 Configure 함수에서 위의 확장 함수를 호출하기만 하면 됩니다.
app.UseHotlinkingPreventionMiddleware();

 
셋째, 정말 잘 막아요?
 
어떻게 도난 방지 체인을 돌파합니까?refer를 검사하는 방식에 따라 페이지 중간부분에서 먼저 눈에 들어오는 주소의 다른 페이지에서 목적 페이지로 이동하면 된다. 이렇게 하면 페이지의refer는 목적 사이트 자체의 것이다. 이렇게 하면 돌파를 할 수 있다.이 방면에서 사용할 수 있는 도구가 매우 많은데, 특히 성숙한 웹 프로젝트 테스트 패키지, 예를 들어 Html Unit 등은 요청에refer를 직접 설정하는 것도 가능하다.
 
만약에 도용 사이트가https의protocol이고 이미지 링크가 http라면https에서 http로 요청한 것은 안전성에 대한 규정 때문에referer를 가지고 있지 않아 도난 방지 체인을 돌아갈 수 있다.
마지막으로 저는 이런 방식은 어느 정도 방어만 할 수 있고 모든 공격을 막을 수 없다고 말할 수 있을 뿐입니다. 아니면 성숙한 서버 응용 프로그램, 예를 들어 Nginx를 사용하는 방안을 권장합니다.
 
GitHub:https://github.com/maxzhang1985/YOYOFx스타를 모실 수 있다면 함께 교류하는 것을 환영합니다.
 
.NET Core 오픈 소스 학습: 214741894

좋은 웹페이지 즐겨찾기