#679 - Un HttpModule per bloccare user agent indesiderati

Spesso i nostri siti subiscono la visita di user agent che servono agli scopi più disparati. Ci sono quelli buoni, che indicizzano le nostre pagine per i motori di ricerca, e quelli meno buoni, che causano solo inutile traffico o peggio ancora sono utilizzati per raccogliere indirizzi e-mail ed effettuare spamming.
ASP.NET ci viene incontro, attraverso la sua pipeline, mettendoci a disposizione la possibilità di creare facilmente HttpModule che possano intercettare, da un unico punto, le richieste alle nostre pagine.
L'HttpModule presente in questo script non fa altro che confrontare lo user agent con la lista contenuta nel web.config, bloccando quelli indesiderati:

using System;
using System.Web;
using System.Configuration;
using System.Collections;
using System.Net;

namespace ASPItalia.com.Modules
{
  public class BotStopModule : IHttpModule
  {
    // inizializzazione dell'HttpModule

    public void Init(HttpApplication Application)
    {
      Application.BeginRequest += new EventHandler(Application_BeginRequest);
    }

    public void Dispose()
    {
    }

    // intercetto ogni richiesta

    private void Application_BeginRequest(object objSender, EventArgs objEventArgs)
    {
      HttpContext context = HttpContext.Current;

      // controllo spider

      checkForSpiders(context);
    }

    // controllo se deve bloccare spider particolari

    private void checkForSpiders(HttpContext context)
    {
      // ricavo lo userAgent

      string browser = context.Request.UserAgent.ToLower();

      try
      {
        // leggo browser bloccati da web.config

        string[] browsers = ConfigurationSettings.AppSettings["bots"].ToString().Split(';');

        for (int i = 0; i < browsers.Length; i++)
        {
          // cerco e blocco lo useragent

          if (browsers[i] != String.Empty && browser.IndexOf(browsers[i]) >= 0)
          {
            context.Response.Clear();
            context.Response.ClearHeaders();
            context.Response.ClearContent();
            context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
            context.Response.End();
          }
        }
      }
      catch {}
    }

  }
}

Successivamente va poi inserito nel web.config la parte di registrazione dell'HttpModule con l'elenco dei bot da bloccare:

<configurtion>
  <appSettings>
    <add key="bots" value="teleport;ripper;wget" />
  </appSettings>

  <system.web>
    <httpModules>
      <add name="BotStop" type="ASPItalia.com.Modules.BotStopModule, BotStopModule" />
    </httpModules>
  </system.web>
</configuration>


Approfondimenti

Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

Per inserire un commento, devi registrarti alla nostra community.




IN EVIDENZA
MISC