Фильтрация по referrer (hotlink).

В IIS нет возможности блокировать запросы поступающие с других сайтов(блокировка по Referrer). Например, когда на совершенно левом сайте ставят изображение с нашего. Иногда это может стать причиной большого трафика и нагрузок на сервер.

В Apache это встроенная функция, ничего придумывать не надо. А под IIS придется написать самим, но это не сложно :)

    private void context_BeginRequest(object sender, EventArgs e)
    {
        HttpContext httpContext = ((HttpApplication)sender).Context;

        if (ReguestIsValid(httpContext))
            return;
        if (httpContext.Request.UrlReferrer == null)
        {
            httpContext.Response.Write("Доступ запрещен");
            httpContext.Response.End();
        }
        if (httpContext.Request.UrlReferrer.Host != httpContext.Request.Url.Host)
        {
            httpContext.Response.Write("Доступ запрещен ");
            httpContext.Response.End();
        }
    }

    private bool ReguestIsValid(HttpContext httpContext)
    {
        string mappings = ConfigurationManager.AppSettings["BlockEx"];
        string fileName = httpContext.Request.PhysicalPath;

        foreach (string map in mappings.Split('|'))
        {
            string cleaned = map.Replace("*", ".*").Replace(".", "\\.");
            if (Regex.IsMatch(fileName, cleaned, RegexOptions.IgnoreCase))
                return false;
        }

        return true;
    }

 

 

В web.config указываем какие запросы мы хотим фильтровать.

<add key="BlockEx " value="*.png|*.jpg"/>

И все….

3 июля 2007 г. 11:42

Комментарии

Комментариев пока нет.

Добавить комментарий






 
Copyright © Антон Ковалев