.NET ez 2012-06-04
網頁中常常會出現明碼的信箱位址,時常會被機器人爬取,做為廣告發送目標。
本篇我利用 .Net 產生 JavaScript,防止機器人直接抓取原始碼中的電子信箱位址。
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
namespace Test
{
public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(MailToJS("[email protected]"));
}
/// <summary>
/// 產生指定範圍的亂數
/// </summary>
/// <param name="Min"></param>
/// <param name="Max"></param>
/// <returns></returns>
public int RandomNext(int Min, int Max)
{
RNGCryptoServiceProvider rngp = new RNGCryptoServiceProvider();
byte[] rb = new byte[4];
rngp.GetBytes(rb);
int value = BitConverter.ToInt32(rb, 0);
value = (value % (Max - Min + 1));
if (value < 0) value = -value;
value += Min;
return value;
}
/// <summary>
/// 將信箱轉為JS
/// </summary>
/// <param name="Mail"></param>
/// <returns></returns>
protected string MailToJS(string Mail)
{
List<string> CList = new List<string>();
for (int i = 32; i <= 64; i++) CList.Add(Convert.ToChar(i).ToString());
for (int i = 91; i <= 126; i++) CList.Add(Convert.ToChar(i).ToString());
List<string> NList = new List<string>();
while (CList.Count > 0)
{
int R = RandomNext(0, CList.Count - 1);
NList.Add(CList[R]);
CList.RemoveAt(R);
}
List<int> EList = new List<int>();
Mail = Mail.ToLower();
Mail = "<a href=\"mailto:" + Mail + "\" hidefocus=\"true\">" + Mail + "</a>";
foreach (char c in Mail) EList.Add(NList.IndexOf(c.ToString()));
for (int i = 0; i < NList.Count; i++)
{
if (NList[i] == "'")
NList[i] = "'" + NList[i].Replace("'", "\\'") + "'";
else if (NList[i] == "\\")
NList[i] = "'" + NList[i].Replace("\\", "\\\\") + "'";
else
NList[i] = "'" + NList[i] + "'";
}
StringBuilder SB = new StringBuilder();
SB.AppendLine("<script type=\"text/javascript\">");
SB.AppendLine("<!--");
SB.AppendLine("\t(function(){");
SB.AppendLine("\t\tvar ek = [" + String.Join(",", NList.ToArray()) + "];");
SB.AppendLine("\t\tvar en = [" + String.Join(",", EList.ToArray()) + "];");
SB.AppendLine("\t\tvar ds = \"\";");
SB.AppendLine("\t\tfor(var i in en) ds += ek[en[i]];");
SB.AppendLine("\t\tdocument.write(ds);");
SB.AppendLine("\t})();");
SB.AppendLine("// -->");
SB.AppendLine("</script>");
return SB.ToString();
}
}
}結果截圖:
標籤: .NET
本文章網址:
https://www.ez2o.com/Blog/Post/csharp-Email-Encoder-Spambots
https://www.ez2o.com/Blog/Post/186
https://www.ez2o.com/Blog/Post/csharp-Email-Encoder-Spambots
https://www.ez2o.com/Blog/Post/186
