莫相离 发表于 2015-1-16 23:15:22

ASP网页编程之改善的SQL防注进(增强抑错)

由于ASP提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。防注进
<%

ASP防注进之办理计划
特别页面处置
由于有些页经由过程流式传送(好比含有文件上传的表单)
假如单一利用穷举Form工具的操纵就会堕落
以是要把这些页面过滤出来,同时在页面中利用sql("检测的字串")才行
渣滓猪zero@new57.com
http://blog.csdn.net/cfaq

源码下载http://www.new57.com/softback/sql.rar





将本页用include办法放在头部以让一切页都能够挪用,好比include在conn.asp里
假如有流式上传的页面请把该页加到表page中,以防form抵触



DimN_no,N_noarray,req_Qs,req_F,N_i,N_dbstr,Conn,N_rs,N_userIP,N_thispage
N_userip=Request.ServerVariables("REMOTE_ADDR")
N_thispage=LCase(Request.ServerVariables("URL"))

N_no="|;|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"能够本人修正嫌疑是注进操纵的字串
N_noarray=split(LCase(N_no),"|")


CallDBopen()
CallN_check_Qs()
CallN_checkPage()
CallDBCLose()


检测以后页是不是是特别页是就挪用N_check_form()
subN_checkPage()

setN_rs=server.CreateObject("ADODB.RecordSet")
N_rs.open"select*frompagewherespcpagelike%"&N_thispage&"%",conn,1,1
if(N_rs.eofANDN_rs.Bof)then
CallN_check_form()
endif
N_rs.Close()
setN_rs=nothing

endsub





检测给定字串
subN_sql(agsql)
这里是不纪录数据库,假如要改请本人修正
N_check"CUS",req_Qs,"OTHER"
endsub

检测Request.Form
subN_check_form()
IfRequest.Form""Then
ForEachreq_FInRequest.Form
N_checkreq_F,Request.Form(req_F),"POST"
Next
endif
endsub

检测Request.QueryString
subN_check_Qs()
IfRequest.QueryString""Then
ForEachreq_QsInRequest.QueryString
N_checkreq_Qs,Request.QueryString(req_Qs),"GET"
Next
endif
endsub

检测
subN_check(ag,agsql,sqltype)
ForN_i=0ToUbound(N_noarray)
IfInstr(LCase(agsql),N_noarray(N_i))0Then
callN_regsql(ag,agsql,sqltype)
Response.Write"MO"
endif
Next
endsub

纪录并中断输入
ag称号
agsql内容
sqltype范例
subN_regsql(ag,agsql,sqltype)
if(sqltype"OTHER")then
Conn.Execute("insertintoSqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ)values("&N_userip&","&N_thispage&","&sqltype&","&ag&","&agsql&")")
endif
Response.Write"<ScriptLanguage=JavaScript>alert(请不要在参数中包括不法字符实验注进!);</Script>"
Response.Write"<spanstyle=font-size:12px>不法操纵!体系做了以下纪录↓<br>"
Response.Write"操纵IP:"&N_userip&"<br>"
Response.Write"操纵工夫:"&Now&"<br>"
Response.Write"操纵页面:"&N_thispage&"<br>"
Response.Write"提交体例:"&sqltype&"<br>"
Response.Write"提交参数:"&ag&"<br>"
Response.Write"提交数据:"&agsql&"</span>"

Response.end
endsub


SubDBopen()
N_dbstr="DBQ="+server.mappath("Sql.mdb")+";DefaultDir=;DRIVER={MicrosoftAccessDriver(*.mdb)};"
SetConn=Server.CreateObject("ADODB.CONNECTION")
Conn.openN_dbstr
endSUB


SubDBCLose()
Conn.close
SetConn=Nothing
Endsub
%>
</p>ASP在国内异常流行,因为国内大多使用的是盗版的Windows和盗版的SQLServer,而ASP+COM+SQLServer实际上也是一种不错的搭配,其性能也不输于PHP+MYSQL,特别是Windows系统和SQLServer都有图形界面,比APACHE和MYSQL易于维护,因此对于不重视知识产权的国家来说也是一种不错的选择。

若相依 发表于 2015-1-17 17:57:59

多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。

莫相离 发表于 2015-1-21 05:41:08

还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。

金色的骷髅 发表于 2015-1-30 08:59:06

ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。

柔情似水 发表于 2015-2-6 09:17:05

不能只是将它停留在纸上谈兵的程度上。

再见西城 发表于 2015-2-15 21:36:24

代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。

再现理想 发表于 2015-3-4 14:00:00

ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。

透明 发表于 2015-3-11 20:00:21

跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组

山那边是海 发表于 2015-3-19 10:49:58

那么,ASP.Net有哪些改进呢?

蒙在股里 发表于 2015-3-27 20:24:25

我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。
页: [1]
查看完整版本: ASP网页编程之改善的SQL防注进(增强抑错)