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)

