ASP网站制作之ASP与考证码
想法是和程序员的想法不一样的.至于为什么.大家去想一想.跟心理学有关的考证码现在你要请求一个QQ号,必要输出很庞大的考证码:考证码由多少个汉字构成,还加上了花哩唬哨的背景,使得有些汉字其实难以识别。腾讯这么做,是为了避免有人使用软件批量猎取QQ号码----每次提交都要输出随机天生的考证码,这是软件难以做到的。最后的考证码,只是几个随机天生的数字。可是道高一尺魔高一丈,很快就有能辨认数字的软件了,“保藏家”们使用这类软件批量猎取帐号,或是探测暗码,由于软件能够孜孜不倦地不休submit。因而,呈现了图片情势的考证码,还要加上无划定规矩的背景,既然人眼都难以分辩,想来软件分辩起来就有必定的难度。可是腾讯入手下手接纳汉字图片做考证码,是否是意味着破解考证码的手艺又有了新停顿,带背景的数字或字母图片情势的考证码,也能够被软件分辩了?
且不论那末多,我们来谈谈ASP天生考证码的举措吧。
仍是从最复杂的例子提及,来懂得一下考证码的基础思绪。
第一个例子,在显现表单的同时,天生一个4位的随机数做为考证码,使用session传送该考证码,在数据处置页面,比对用户输出的考证码与session中的值是不是分歧。特地说一句,我曾见过有懵懂的仁兄使用hidden范例的input控件传送考证码,孰不知,经由过程检察页面源代码,该数据是原形毕露的。另有password型的input中的数据也一样。
<%
**********************************
*NAME:post.asp*
*CODE:netops(www.netop.cc)*
*USE:考证码示例一:数字型*
*TIME:2005.7*
**********************************
Response.Buffer=true
DimCheckCode
Response.Write"<html><body>"
======***表单提交后:***======
ifRequest.ServerVariables("REQUEST_METHOD")="POST"then
Dimfounderr,callform,msg
founderr=false是不是有毛病产生
callform=false是不是挪用表单
msg=""提醒信息
==============考证码考证入手下手===========
dimsessionCode
sessionCode=session("chkCode")
session("chkCode")=""
CheckCode=trim(Request.Form("chkcode"))
ifCheckCode=""then
msg=msg+"<li>请填写考证码"
founderr=true
callform=true
elseifcstr(CheckCode)cstr(sessionCode)then
msg=msg+"<li>考证码不准确"
founderr=true
callform=true
endif
==================考证码考证停止============
iffounderr=truethen
callmessage("500")
ifcallform=truethencallmyform()
else
msg="<li>操纵乐成!"
callmessage("500")
endif
======***页面初始化(表单提交前)***======
else
CheckCode=""
callmyform()
endif
Response.Write"</body></html>"
REM子历程,界说表单
Submyform()
Response.Write"<tablewidth=500border=1cellspacing=0cellpadding=5align=center>"&_
"<formname=form1method=postaction=post.asp>"&_
"<trheight=30><tdrowspan=2width=100align=center>考证码</td>"&_
"<td><inputtype=textname=chkcodesize=10>"&_
getChkCode()&"</td></tr>"&_
"<trheight=30><td>请填写文本框右边的考证码</td></tr>"&_
"<trheight=30><tdcolspan=2align=center>"&_
"<inputtype=submitname=Submitvalue=提交></td></tr>"&_
"</form></table>"
endSub
Rem子函数,天生考证码(四位随机数)
functiongetChkCode()
dimranNum
randomize
ranNum=int(9000*rnd)+1000
session("chkCode")=ranNum
getChkCode=ranNum
endfunction
Rem提醒信息
submessage(w)
Response.Write"<tablewidth="&w&"border=1cellspacing=0cellpadding=5align=center>"&_
"<trheight=30><td>提醒信息</td></tr>"&_
"<trvalign=top><tdstyle=""color:red;"">"&msg&"</td></tr></table>"
endsub
%>
以上代码展现天生考证码的一样平常思绪,天生一个四位随机数作为考证码,这是最复杂,同时也是最不平安的一种办法。
也许你想到了,能够以每位数字对应一张图片,天生图片型的考证码,就象图片型计数器那样处置。这并非一个好设法,它跟数值型的考证码没有实质上的区分,其实不能进步平安性。
上面,先容怎样天生图片型的考证码。
起首,能够经由过程ASP天生xbm型的考证码,这的切实其实确是一张xbm格局的图片,并且,你能够恣意设置图片的巨细。为了复杂起见,我们仍以数字为例。
能够把天生考证码的代码自力出来,定名为checkcode.asp:
<%
**********************************************
*NAME:checkcode.asp*
*CODE:netops(www.netop.cc)*
*USE:天生xbm格局的考证码*
*TIME:2005.7*
**********************************************
onerrorresumenext
dimi
dimcountdata
countdata="1234567890"
dimrou,chkcode,chklen
chkcode=""
chklen=4
randomize
fori=1to4
rou=int(rnd*10)
chkcode=chkcode+cstr(rou)
next
dimstrDigits
strDigits=Array(_
"0","0x3c","0x66","0x66","0x66","0x66","0x66","0x66","0x66","0x66","0x3c",_
"1","0x30","0x38","0x30","0x30","0x30","0x30","0x30","0x30","0x30","0x30",_
"2","0x3c","0x66","0x60","0x60","0x30","0x18","0x0c","0x06","0x06","0x7e",_
"3","0x3c","0x66","0x60","0x60","0x38","0x60","0x60","0x60","0x66","0x3c",_
"4","0x30","0x30","0x38","0x38","0x34","0x34","0x32","0x7e","0x30","0x78",_
"5","0x7e","0x06","0x06","0x06","0x3e","0x60","0x60","0x60","0x66","0x3c",_
"6","0x38","0x0c","0x06","0x06","0x3e","0x66","0x66","0x66","0x66","0x3c",_
"7","0x7e","0x66","0x60","0x60","0x30","0x30","0x18","0x18","0x0c","0x0c",_
"8","0x3c","0x66","0x66","0x66","0x3c","0x66","0x66","0x66","0x66","0x3c",_
"9","0x3c","0x66","0x66","0x66","0x66","0x7c","0x60","0x60","0x30","0x1c")
dimiCharWidth,iCharHeight,theBit,theNum,iRow,k,theOffset
dimimageStr
imageStr=""
iCharWidth=8
iCharHeight=10*1
Response.ContentType="image/x-xbitmap"
Response.Expires=0
Response.Write"#definecounter_width"&iCharWidth*chklen&chr(13)&chr(10)
Response.Write"#definecounter_height"&iCharHeight&chr(13)&chr(10)
Response.Write"staticunsignedcharcounter_bits[]={"
foriRow=0toiCharHeight-1
fori=1tochklen
theBit=mid(chkcode,i,1)
k=0
dowhilek<ubound(strDigits)
ifstrDigits(k)=theBitthenexitdo
k=k+iCharHeight+1
loop
ifk>=ubound(strDigits)thenk=0
theOffset=k+1
imageStr=imageStr+(strDigits(theOffset+iRow))&","
next
next
imageStr=left(imageStr,(len(imageStr)-1))
Response.WriteimageStr
Response.Write"};"
session("chkCode")=chkcode
%>
在post.asp中,界说表单时,响应的代码改成:
REM子历程,界说表单
Submyform()
Response.Write"<tablewidth=500border=1cellspacing=0cellpadding=5align=center>"&_
"<formname=form1method=postaction=default.asp>"&_
"<trheight=30><tdrowspan=2width=100align=center>考证码</td>"&_
"<td><inputtype=textname=chkcodesize=10>"&_
"<imgsrc=checkcode.aspwidth=32height=10border=0></td></tr>"&_
"<trheight=30><td>请填写文本框右边的考证码</td></tr>"&_
"<trheight=30><tdcolspan=2align=center>"&_
"<inputtype=submitname=Submitvalue=提交></td></tr>"&_
"</form></table>"
endSub
以上就是最复杂的xbm型的考证码。可是这类格局的考证码,windowsxpsp2的用户没法看到,缘故原由是xpsp2作废了对xbm格局文件的撑持。不外,能够经由过程修正注册表办理这个成绩:翻开注册表,找到HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternetExplorerSecurity,用右键增添一个dword值,更名为BlockXBM,其值为00000000。改好后,从头翻开巡游器就能够了。也能够用文件编纂器编纂一文件,内容以下:
REGEDIT4
"BlockXBM"=dword:00000000
将该文件保留为扩大名为reg的注册表文件,然后双击该文件便可。
除xbm格局的考证码,也能够使用Adodb.Stream工具,开辟出更庞大的BMP型考证码,能够从http://www.netop.cc/downloads/bmpchkcode.rar失掉相干程序。使用该程序,能够天生数字、字母夹杂,黑色,且有黑色背景的考证码。
关于租用空间的伴侣来讲,利用第三方组件遭到很年夜限定。假如具有本人的服务器,能够试一下使用ASP画图组件shotgraph天生考证码,该考证码是GIF格局的,具有很普遍的通用性。该组件可从http://www.netop.cc/downloads/shotgraph.zip失掉。紧缩包里有具体的示例程序和申明文档。
总之,天生考证码的举措良多,如今有良多第三方组件能够匡助你天生各类款式的考证码,上彀找找看吧。
ASP最大的缺点在于网络的安全性和可靠性,企业将经营数据放在开放的平台上,最大的担忧就是如何保证这些数据不被其他人破坏。 还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。 接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点: ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。 如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 掌握asp的特性而且一定要知道为什么。
页:
[1]