ASP.NET/IIS 7에서 hotlink 이미지보기를 감지하는 방법이 있습니까? 나는 시청자를 차단하고 싶지 않다. 누군가 구글 이미지 검색에서 나의 이미지를 클릭 할 때 각 정적 이미지에 대한 이미지 뷰 카운터를 증가시켜야한다.ASP.NET은 hotlink 이미지보기를 감지합니다
0
A
답변
2
매우 간단합니다. 추천자 요청 헤더를 확인하고 로컬 도메인과 일치하지 않는 요청을 로깅 할 수 있습니다. 이런 식으로 뭔가 작업을해야합니다 :
using System;
using System.Linq;
using System.Web;
namespace ImageLogger
{
public class ImageLoggerModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.LogRequest += new EventHandler(context_LogRequest);
}
void context_LogRequest(object sender, EventArgs e)
{
var context = HttpContext.Current;
// perhaps you have a better way to check if the file needs logging,
// e.g.: it is a file in a certain folder
switch (context.Request.Url.AbsolutePath.Split('.').Last().ToLower())
{
case "png":
case "jpg":
case "gif":
case "bmp":
if (context.Request.UrlReferrer != null)
{
if (!"localhost".Equals(
context.Request.UrlReferrer.Host,
StringComparison.CurrentCultureIgnoreCase)
)
{
// request is not from local domain --> log request
}
}
break;
}
}
public void Dispose()
{
}
}
}
당신이 모듈 섹션에서이 모듈에 연결하지의 Web.config에서 : IIS에서 통합 모드의
<system.webServer>
<modules>
<add name="ImageLogger" type="ImageLogger.ImageLoggerModule"/>
이 유일한 작품 - 클래식 모드 ASP.NET에서 결코 정적 파일에 대한 이벤트를 가져옵니다.
이제 나는 그것에 대해 생각해 보았습니다. 당신은 현재의 로깅을 모두 스크랩 할 수있다. (나는 추측한다?) 그리고이 모듈을 사용하고 리퍼러 로직을 없앤다. 그렇게하면 로깅을하는 곳이 한 군데 밖에 없습니다.
+0
감사! 그것은 작동하지만 너무 많은 데이터베이스 쿼리가 있고 이미지 로딩 속도가 느려지거나 별도의 스레드에서 로그를 업데이트하기 때문에 더 많은 로깅을 필터링해야합니다. –
핫 링크 이미지보기가 사이트의 이미지를 보는 사용자와 다른 점은 무엇입니까? – MikeSmithDev
Hotlink는 전체 웹 페이지 대신 이미지 파일 만 요청합니다. –