|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
当然了,现在国内CRM厂商的产品与其说是CRM,但从至少从我的角度分析上来看,充其量只是一个大型的进销存而已了,了解尚浅,不够胆详评,这里只提技术问题数据必定要对用户大概输出的诸如引号,尖括号等特别字符赐与充足器重,它们大概激发严峻的平安成绩。SQL注进的基础伎俩之一,就是使用对单引号未加过滤的平安毛病。
用户的输出不过两个用处:对数据库操纵或显现在页面上,上面分离对这两种情形下特别字符的处置加以申明。
1.对数据库操纵
用户输出的数据用于对数据库举行操纵时,又分为两种情形,一是举行写库操纵,二是作为查询前提。
1.1写库操纵
(insert及update都视为写库操纵,这果以insert为例申明,update的处置不异)
一样平常接纳insert语句或AddNew办法两种体例举行写库操纵,我们先来看insert语句:
DIMusername,sqlstr
username=trim(Request.Form("uname"))
sqlstr="insertinto[userinfo](username)values("&username&")"以SQLServer为例,利用这类体例写库,假如username中含用单引号(),会堕落。利用上面的自界说函数,能够将单引号举行转换:
Rem转换SQL不法字符
functionSQLEncode(fString)
ifisnull(fString)then
SQLEncode=""
exitfunction
endif
SQLEncode=replace(fString,"","")
endfunction
以上函数将一个单引号转换为两个一连的单引号,数据库可以承受,并以一个单引号写进。SQL语句改成:
sqlstr="insertinto[userinfo](username)values("&SQLEncode(username)&")"
再来看AddNew办法:
DIMusername
username=trim(Request.Form("uname"))
MyRst为Recordset工具,MyConn为Connection工具
MyRst.open"[userinfo]",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还有什么网站等等的源代码 |
|