如今登陸驗證碼作為登陸界面必不可少的一項驗證,就像當初我在學校時一樣,現在應該還有很多在校學生只知道是出于安全考慮,為什么要添加驗證碼?我們在登陸的時候不是可以看到界面的驗證碼嗎?這樣做的意義是什么???當初我也這樣傻傻的認為過。其實這個驗證碼不是防止人肉眼識破的,而是防止網絡黑客通過“程序機器”爆破個人登陸賬戶或者惡意注冊,獲取相關信息,影響網絡秩序,進行違法操作。往往登陸界面或注冊界面的用戶名和密碼會有格式要求,黑客可以根據這個格式要求編寫相關程序產生符合格式的登錄名和密碼,如果驗證碼是通過session存入到服務器中的話,就增大了黑客爆破的難度(服務器安全級別夠高的話),因為“機器”是不能像人那樣看見客戶端上的驗證碼。
附隨機驗證碼代碼:
string chkCode = string.Empty;
//顏色列表,用于驗證碼、噪線、噪點
Color[] color = { Color.Black, Color.Red, Color.Blue, Color.Green, Color.Brown, Color.Brown, Color.DarkBlue };
//字體列表,用于驗證碼
string[] font = { "Gungsuh" };
//驗證碼的字符集,去掉了一些容易混淆的字符
char[] character = { '2', '3', '4', '5', '6', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y' }; Random rnd = new Random();
//生成驗證碼字符串
for (int i = 0; i < 4; i++) { chkCode += character[rnd.Next(character.Length)]; } Bitmap bmp = new Bitmap(100, 40); Graphics g = Graphics.FromImage(bmp); g.Clear(Color.White);
//畫驗證碼字符串
for (int i = 0; i < chkCode.Length; i++) { string fnt = font[rnd.Next(font.Length)]; Font ft = new Font(fnt, 22); Color clr = color[rnd.Next(color.Length)]; g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 20 + 8, (float)8); }
//清除該頁輸出緩存,設置該頁無緩存
Response.Buffer = true; Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0); Response.Expires = 0; Response.CacheControl = "no-cache"; Response.AppendHeader(" //將驗證碼圖片寫入內存流,并將其以 "image/Png" 格式輸出 MemoryStream ms = new MemoryStream(); try { bmp.Save(ms, ImageFormat.Png); Session["CheckCode"] = chkCode; Response.ClearContent(); Response.ContentType = "image/Png"; Response.BinaryWrite(ms.ToArray()); } finally { //顯式釋放資源 bmp.Dispose(); g.Dispose(); }
新聞熱點
疑難解答