web 2.0

Email Obfuscator HttpModule With Custom HttpFilter

Hi,

Here is a Simple Email Obfuscator HttpModule using Custom HttpFilter to Obfuscate Email Addresses in Page Contents before these are sent to the Client.

Considering a HttpFilter Base Class (to make future HttpFilter more simple)

public abstract class HttpFilterBase : Stream
{
    #region Protected Properties

    protected Stream OriginalFilter { get; private set; }

    #endregion

    #region Constructors

    protected HttpFilterBase(Stream originalFilter)
    {
        OriginalFilter = originalFilter;
    }

    #endregion

    #region Public Overrides Properites

    public override bool CanRead { get { return true; } }
    public override bool CanSeek { get { return true; } }
    public override bool CanWrite { get { return true; } }
    public override long Length { get { return 0; } }
    public override long Position { get; set; }

    #endregion

    #region Public Overrides Methods

    public override void Flush()
    {
        OriginalFilter.Flush();
    }
    public override int Read(byte[] buffer, int offset, int count)
    {
        return OriginalFilter.Read(buffer, offset, count);
    }
    public override long Seek(long offset, SeekOrigin origin)
    {
        return OriginalFilter.Seek(offset, origin);
    }
    public override void SetLength(long value)
    {
        OriginalFilter.SetLength(value);
    }
    public override void Close()
    {
        OriginalFilter.Close();
    }

    #endregion
}

The EmailObfuscator HttpFilter

public class EmailObfuscator : HttpFilterBase
{
    #region Private Fields

    private Regex _emailRegex = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*([,;]\s*\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*");

    #endregion

    #region Constructors

    public EmailObfuscator(Stream originalFilter)
        : base(originalFilter)
    {
    }

    #endregion

    #region Public Overrides Methods

    public override void Write(byte[] buffer, int offset, int count)
    {
        Byte[] data = new Byte[count];
        Buffer.BlockCopy(buffer, offset, data, 0, count);
        String html = Encoding.Default.GetString(buffer);

        // Obfuscate Email Addresses
        MatchCollection matches = _emailRegex.Matches(html);
        if (matches.Count > 0)
        {
            foreach (Match m in matches)
            {
                String s = m.Value;
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < s.Length; i++)
                {
                    sb.AppendFormat("&#{0};", (Int32)s[i]);
                }
                html = html.Replace(m.Value, sb.ToString());
            }
        }
        Byte[] outdata = Encoding.Default.GetBytes(html);
        OriginalFilter.Write(outdata, 0, outdata.GetLength(0));
    }

    #endregion
}

The EmailObfuscator HttpModule

public class EmailObfuscatorModule : HttpModuleBase
{
    public override void Init(System.Web.HttpApplication context)
    {
        context.BeginRequest += new EventHandler(BeginRequest);
    }

    private void BeginRequest(object sender, EventArgs e)
    {
        HttpApplication Application = sender as HttpApplication;
        String OriginalString = Application.Request.Url.OriginalString;
        if (OriginalString.ToUpperInvariant().Contains(".ASPX"))
        {
            Application.Response.Filter = new EmailObfuscator(Application.Response.Filter);
        }
    }
}

Web.config Modification

<httpModules>
  <add name="EmailObfuscatorModule" type="Sb2.Web.HttpModules.EmailObfuscatorModule, Sb2.Web"/>
</httpModules>

 

Hope this help’s!



Views(703)

kick it on DotNetKicks.com

Share/Save/Bookmark Subscribe

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

C#

Comments

Add comment


 

biuquote
Loading



Technorati Profile