ASP教程之数据考证之特别字符处置
当然了,现在国内CRM厂商的产品与其说是CRM,但从至少从我的角度分析上来看,充其量只是一个大型的进销存而已了,了解尚浅,不够胆详评,这里只提技术问题数据必定要对用户大概输出的诸如引号,尖括号等特别字符赐与充足器重,它们大概激发严峻的平安成绩。SQL注进的基础伎俩之一,就是使用对单引号未加过滤的平安毛病。用户的输出不过两个用处:对数据库操纵或显现在页面上,上面分离对这两种情形下特别字符的处置加以申明。
1.对数据库操纵
用户输出的数据用于对数据库举行操纵时,又分为两种情形,一是举行写库操纵,二是作为查询前提。
1.1写库操纵
(insert及update都视为写库操纵,这果以insert为例申明,update的处置不异)
一样平常接纳insert语句或AddNew办法两种体例举行写库操纵,我们先来看insert语句:
DIMusername,sqlstr
username=trim(Request.Form("uname"))
sqlstr="insertinto(username)values("&username&")"以SQLServer为例,利用这类体例写库,假如username中含用单引号(),会堕落。利用上面的自界说函数,能够将单引号举行转换:
Rem转换SQL不法字符
functionSQLEncode(fString)
ifisnull(fString)then
SQLEncode=""
exitfunction
endif
SQLEncode=replace(fString,"","")
endfunction
以上函数将一个单引号转换为两个一连的单引号,数据库可以承受,并以一个单引号写进。SQL语句改成:
sqlstr="insertinto(username)values("&SQLEncode(username)&")"
再来看AddNew办法:
DIMusername
username=trim(Request.Form("uname"))
MyRst为Recordset工具,MyConn为Connection工具
MyRst.open"",MyConn,0,3
MyRst.AddNew
MyRst("username").Value=username
MyRst.Update
MyRst.Close
利用这类体例写库时,不用挪用SQLEncode()对单引号举行转换,数据库会自行处置。
关于存储历程的的参数,一样不用举行单引号的转换。
倡议人人使用存储历程举行操纵,优点嘛,我在《ASP与存储历程》一文中已做了论述。不然,倡议利用AddNew办法写库,优点不单单在于制止对单引号举行处置,本文对此不作深切切磋。
1.2用户输出做为查询前提
假如用户输出的数据作为查询前提呈现在where子句中,不管该where子句属于update语句、delete语句仍是select语句,都要对单引号举行转换。
2.用户输出的数据作为输入,显现在页面上
我们这里只会商不同意用户利用HTML代码的情形,也就是说,即便用户输出了HTML代码,这些数据也不会以HTML代码的情势显现。至于同意用户利用HTML代码的情形,对照庞大,今后专文切磋。
用户输出的数据是相对不成以不加处置,原样显现的。假如个中包括HTML或js代码,使你的页面凌乱不胜却是大事,乃至能够格失落你的硬盘。
输入显现在页面上的数据,有多是用户的间接输出,或是取自数据库。能够看到以上在进库时的处置只是转换了单引号,对尖括号,双引号等特别字符并未处置,我们放在输入的时分再举行处置。
ASP中的server.HTMLEncode()办法能够将很多字符转换为“HTML字符”,如将<转换为<,将>转换为>等等。
在数据显现在页面上之前,能够用server.HTMLEncode()对其举行转换。可是该办法不会对回车,空格举行转换,如许就形成以下成绩:假如用户是经由过程textarea控件输出的数据,输入时将不会保存原有格局,不但没有回车换行,多个空格也只会显现为一个。为懂得决这个成绩,我们利用以下自界说函数:
Rem转换HTML不法字符,用于输入显现时
functionHTMLEncode(fString)
ifnotisnull(fString)then
fString=Replace(fString,">",">")
fString=Replace(fString,"<","<")
fString=Replace(fString,CHR(34),""")双引号
fString=Replace(fString,CHR(39),"")单引号
fString=Replace(fString,CHR(32)&CHR(32),"")空格
fString=Replace(fString,CHR(9),"")tab键值
fString=Replace(fString,CHR(10),"<br>")换行
fString=Replace(fString,CHR(13),"")回车
HTMLEncode=fString
endif
endfunction
挪用以上函数,输入经由过程textarea控件输出的数据,会失掉中意的了局。
假如数据输入在表单控件中,不管是何种控件,都可使用server.HTMLEncode()办法转换字符,即便是关于textarea控件,也不会发生成绩。固然回车空格没有被转换,但在该控件中能够被辨认。可是,server.HTMLEncode()办法不转换单引号。以是,控件的值必定要利用双引号:
<inputtype=textname=unamevalue="""&server.HTMLEncode(user
源代码保护方面其实现在考虑得没那么多了..NET也可以反编译.ASP写得复杂的话别人能看得懂的话.他也有能力自己写了.这方面担心的倒不太多.纵观现在网上可以下载的那些所谓BBS还有什么网站等等的源代码 那么,ASP.Net有哪些改进呢? 学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。 还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。 我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标. 从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了 不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍 不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍 学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。 ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
页:
[1]