Un HttpModule per bloccare user agent indesiderati

di Daniele Bochicchio, in ASP.NET, HttpModule, C#,

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>

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi