思考验证码的用处
1.认为图片验证码没有什么用,并且也特别的烦人(每次上移动的网站都要频频地输入验证码),但人家要求,也只好弄一个。
2.验证码有用,有什么作用
比如某黑客获得一银行账号,然后打开账号的开户银行的网上银行登录界面。
(1)没有验证码,只需要输入用户名和密码就能进入。
黑客:马上写了一个程序,用来模拟浏览器向网上银行服务器提交账号和密码尝试登录。(枚举字典攻击 )由于取款密码是6位阿拉伯数字,黑客的电脑从六个零开始测试一直到六个九(也就有一百万种组合),这一定会测试出真正的密码。
黑客:找到一台宽带高速上网的电脑,假设这台电脑1秒能测试10个密码,于是花费10万秒的时间肯定能找到密码。10万秒也就是27小时,一天多点的时间,实际上很可能用不了那么长的时间。黑客外头转了一圈回来,发现密码已经找到了,于是马上登录网上银行捞钱,或者伪造一个银行卡去aTM机上提取现金。也就是说黑客最多花了一天时间即可获得数目不可预知的非法收入。
(2)采用了验证码技术
用户登录时除了要输入账号和取款密码,浏览器还显示一个图片,里面显示了一些潦草的字符,用户需要辨认这些字符然后再输入进去,浏览器向服务器提交表单时会附加用户输入的验证码,服务器接受表单数据后除了校验账号和取款密码后,还要检查验证码是否输入正确,若登录信息校验失败,则服务器端则会提示重新登录,而且还生成包含随机内容的新的验证码,用户在次登录时又得重新识别新的验证码了。
由于正确的验证码文本是保存在服务器上的,客户端的黑客程序不可能获得,验证码的内容是随机的,黑客程序也无法找到规律,只能辨认从服务器端发出的包含验证码的图片来获得验证码。这里就体现了电脑和人脑的差别了,人脑在图形识别方面远远超过了目前的电脑,服务器端使用一些技术生成的书写潦草,充满随机分布的杂点的图片,人脑是可以相当容易的识别的,但目前的电脑是难以识别的。黑客程序无法识别验证码,只能显示图片让黑客亲自辨认,这时每测试一次密码,黑客都得仔细辨认一下验证码图片,然后手工输入验证码文本。最多要输入一百万次。
新建页面checkimage.aspx
checkimage.aspx.cs代码:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Drawing;
using System.IO;
namespace jgy_keshi_lyb
{
public partial class checkimage : System.Web.UI.Page
{
Random ran = new Random();
protected void Page_Load(object sender, Eventargs e)
{
string str = getRandomValidate(4);
Session["check"] = str;
//这一步是为了将验证码写入Session,进行验证,不能缺省,也可一使用cookie
getImageValidate(str);
}
//得到随机字符串,长度自己定义
private string getRandomValidate(int len)
{
int num;
int tem;
string rtuStr = "";
for (int i = 0; i < len; i++)
{
num = ran.Next();
/*
* 这里可以选择生成字符和数字组合的验证码
*/
tem = num % 10 + 0;//生成数字
//tem = num % 26 + a;//生成字符
rtuStr += Convert.ToChar(tem).ToString();
}
return rtuStr;
}
//生成图像
private void getImageValidate(string strValue)
{
//string str = "OO00"; //前两个为字母O,后两个为数字0
int width = Convert.ToInt32(strValue.Length * 12); //计算图像宽度
Bitmap img = new Bitmap(width, 23);
Graphics gfc = Graphics.FromImage(img); //产生Graphics对象,进行画图
gfc.Clear(Color.White);
drawLine(gfc, img);
//写验证码,需要定义font
font font = new font("arial", 12, fontStyle.Bold);
System.Drawing.Drawing2D.LinearGradientBrush brush =
new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.DarkOrchid, Color.Blue, 1.5f, true);
gfc.DrawString(strValue, font, brush, 3, 2);
drawPoint(img);
gfc.DrawRectangle(new Pen(Color.DarkBlue), 0, 0, img.Width - 1, img.Height - 1);
//将图像添加到页面
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
//更改Http头
Response.ClearContent();
Response.ContentType = "image/gif";
Response.BinaryWrite(ms.Toarray());
//Dispose
gfc.Dispose();
img.Dispose();
Response.End();
}
private void drawLine(Graphics gfc, Bitmap img)
{
//选择画10条线,也可以增加,也可以不要线,只要随机杂点即可
for (int i = 0; i < 10; i++)
{
int x1 = ran.Next(img.Width);
int y1 = ran.Next(img.Height);
int x2 = ran.Next(img.Width);
int y2 = ran.Next(img.Height);
gfc.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); //注意画笔一定要浅颜色,否则验证码看不清楚
}
}
private void drawPoint(Bitmap img)
{
/*
//选择画100个点,可以根据实际情况改变
for (int i = 0; i < 100; i++)
{
int x = ran.Next(img.Width);
int y = ran.Next(img.Height);
img.SetPixel(x,y,Color.Fromargb(ran.Next()));//杂点颜色随机
}
*/
int col = ran.Next();//在一次的图片中杂店颜色相同
for (int i = 0; i < 100; i++)
{
int x = ran.Next(img.Width);
int y = ran.Next(img.Height);
img.SetPixel(x, y, Color.Fromargb(col));
}
}
}
}
在login.aspx页面中使用验证码,并实现双击更换图片功能:
<img src="checkimage.aspx"
alt=看不清楚,双击图片换一张。
ondblclick="this.src= checkimage.aspxflag= + Math.random() "
border="1" height="24" />
新闻标题:深圳网站制作公司中如何去实现asp.net(c#)验证码
新闻来源:https://www.cdcxhl.com/news48/132848.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有网站制作等
广告
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源:
创新互联