为何网页上的验证要用图片形式的附加码?作用何在?

doublewood001 2004-09-12 04:33:37
它的作用本人猜测应该是防止黑客攻击,是否在网络传输过程中就把附加码转成图片加密了,进一步防止黑客重数据包里截取信息,有谁能有完整的解释啊?(分析越详细,分就给谁了)
...全文
460 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqdao 2004-09-13
  • 打赏
  • 举报
回复
问 SESSION到底要不要依赖COOKIE才能工作,如果要,那么在本地找出COOKIE中的内容,就不知道了产生的字符串了吗?一样不安全啊。
答 session需要本地cookie支持,因为它会在本地存一个标示,和服务器上的session对应,而session得内容还是存在服务器上的。你如果知道了这个标示,而且又是在同一服务器页面提交就可以获得值
dz43 2004-09-13
  • 打赏
  • 举报
回复
加密 保护你传输信息的安全
andrawsky 2004-09-13
  • 打赏
  • 举报
回复
防止用程序自动提交
bluefox168 2004-09-13
  • 打赏
  • 举报
回复
B到S的通信一般都是经过ssl加密传输的,不容易破解吧?
doublewood001 2004-09-13
  • 打赏
  • 举报
回复
ziji ding
doublewood001 2004-09-13
  • 打赏
  • 举报
回复
B <-------- S
在S(Server)到 B (Browser)的过程中,假如 H(黑客)在B处获得了S 传过来的验证码,然后以穷举方式加验证码不断访问S试探密码,因为每一次穷举失败后S都会传回新的验证码过来,H 再获得此验证码再穷举,直到密码破译为止,如果验证码为数字时,H写个循环读取验证码的程序就可以轻易再穷举下去,假如为图片时,就算H 得到了,也是张图片,不可能把图片中的验证码转成字符型,从而穷举破译就不能进行下去。
B --------> S
在B(Browser)到S(Server)的过程中,B传过去的密码和验证码到了S的时候,因为S之前已经保存的传过去的验证码信息,所以此时S只要核对B传来的验证码就行了,如果通过了,再进一步验证密码,从而达到目的
当然,这只是防止H利用穷举方式破译密码,假如H有能力在B到S的通信过程中截取密码,那就另当别论了

我是根据上面高手的回复这样理解的,不知正确否?请高手指教
荣之梦 2004-09-12
  • 打赏
  • 举报
回复
vb的吗?
jerrycool 2004-09-12
  • 打赏
  • 举报
回复
boycheng()
你给我来个正解啊。
我自己开帖问过了,要是解决了,那就好了,如果您能告诉我。很好啊。
哈哈~~~
看看:http://community.csdn.net/Expert/topic/3130/3130711.xml
1979xt 2004-09-12
  • 打赏
  • 举报
回复
是为了防止黑客用程序自动提交,不是怕黑客截获用户提交的信息.
boycheng 2004-09-12
  • 打赏
  • 举报
回复
SESSION到底要不要依赖COOKIE才能工作,如果要,那么在本地找出COOKIE中的内容,就不知道了产生的字符串了吗?一样不安全啊。
....回家好好看看书吧,这个问题有点太低能了,这里说出来不太合适
hbzxf 2004-09-12
  • 打赏
  • 举报
回复
所以说就是为了防止程序重复的提交避免黑客使用穷举的手段尝试密码。当然了验证图片声称后会产生临时文件,防止黑客获取图片详细信息
  • 打赏
  • 举报
回复
是怕机器人自动提交
sanfv 2004-09-12
  • 打赏
  • 举报
回复
好帖。顶
zl9732 2004-09-12
  • 打赏
  • 举报
回复
哈哈,学习
jerrycool 2004-09-12
  • 打赏
  • 举报
回复
回复人: doublewood001(双木) ( ) 信誉:100 2004-09-12 17:10:00 得分: 0


to ccwq(中原绝代[Don't diao dead on the tree]) 好,有点明白了,不过还有不明的地方:用户输入的验证码也会给黑客截取的啊?除非用户提交回来的也是图片验证,一般来说,黑客会在哪个环节得到这个验证码(当不是图片验证时)


其实我觉得用图片验证也不是太安全,以前TENCENT申请QQ也一样要图片验证吗?有人就用XMLHTTP得到每次产生的字符串,我没做过,但试过。具体原理谁知道,说说啊。
SESSION到底要不要依赖COOKIE才能工作,如果要,那么在本地找出COOKIE中的内容,就不知道了产生的字符串了吗?一样不安全啊。
jerrycool 2004-09-12
  • 打赏
  • 举报
回复
工作原理是这样的:
先在预先的字符串中取出几个(到底几个你定)。再把这些字符赋值给SESSION,然后调用画图的类函数画出这个图片。

用户在前台看到图片中的字符后,在输入框里输入看到的字符串,再和SESSION一比较,
if == 那么正确
else 错误!

楼主自己好好看看下面的实例:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Drawing.Imaging;

namespace GuestBook
{
/// <summary>
/// Gif 的摘要说明。
/// </summary>
public class Gif : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
//RndNum是一个自定义函数
string VNum=RndNum(4); //这里的数字4代表显示的是4位的验证字符串!
Session["VNum"]=VNum;
ValidateCode(VNum);
}
//生成图像函数
private void ValidateCode(string VNum)
{
int Gheight=(int)(VNum.Length * 11.5);
//gheight为图片宽度,根据字符长度自动更改图片宽度
System.Drawing.Bitmap Img = new System.Drawing.Bitmap(Gheight,20);
Graphics g = Graphics.FromImage(Img);
g.DrawString(VNum,new System.Drawing.Font("Arial",9),new System.Drawing.SolidBrush(Color.Red),3,3);
//在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)
System.IO.MemoryStream ms=new System.IO.MemoryStream();
Img.Save(ms,System.Drawing.Imaging.ImageFormat.Png);
Response.ClearContent(); //需要输出图象信息 要修改HTTP头
Response.ContentType="image/Png";
Response.BinaryWrite(ms.ToArray());
g.Dispose();
Img.Dispose();
Response.End();
}

//生成随机数函数中从Vchar数组中随机抽取,字母区分大小写
public string RndNum(int VcodeNum)
{
string Vchar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z" ;

string[] VcArray = Vchar.Split(',') ;
string VNum = "" ;//由于字符串很短,就不用StringBuilder了
int temp = -1 ;//记录上次随机数值,尽量避免生产几个一样的随机数

//采用一个简单的算法以保证生成随机数的不同
Random rand =new Random();
for ( int i = 1 ; i < VcodeNum+1 ; i++ )
{
if ( temp != -1)
{
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
}
//int t = rand.Next(35) ;
int t=rand.Next(61);
if (temp != -1 && temp == t)
{
return RndNum( VcodeNum );
}
temp = t ;
VNum += VcArray[t];

}
return VNum ;
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
doublewood001 2004-09-12
  • 打赏
  • 举报
回复
to ccwq(中原绝代[Don't diao dead on the tree]) 好,有点明白了,不过还有不明的地方:用户输入的验证码也会给黑客截取的啊?除非用户提交回来的也是图片验证,一般来说,黑客会在哪个环节得到这个验证码(当不是图片验证时)
ccwq 2004-09-12
  • 打赏
  • 举报
回复
比如你传一个Session值记录当前随机生成的验证码,传过去生成图片后,在用户提交后判断输入的验证码和Session值是否一致,这只是其中一种方法
savagewang1978 2004-09-12
  • 打赏
  • 举报
回复
为了防止黑客攻击。
如果没有图片附加码,黑客可以编写程序循环提交用户登陆信息,利用穷举来破解密码。
有了图片验证,黑客就不能解析图片里的数字,使得程序自动提交失败!
doublewood001 2004-09-12
  • 打赏
  • 举报
回复
那我们输入验证码之后,为什么还要跟图片的验证码一直,它的工作原理是怎样的,举个例子说说啊。
加载更多回复(8)

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧