ASP防注入之解决方案
特殊页面处理
因为有些页通过流式传递(比如含有文件上传的表单)
如果单一使用穷举Form对象的操作就会出错
所以要把这些页面过滤出来同时在页面中使用sql(检测的字串)才行
垃圾猪
将本页用include方法放在头部以让所有页都可以调用比如include在connasp里
如果有流式上传的页面请把该页加到表page中以防form沖突
Dim N_noN_noarrayreq_Qsreq_FN_iN_dbstrConnN_rsN_userIPN_thispage
N_userip = RequestServerVariables(REMOTE_ADDR)
N_thispage = LCase(RequestServerVariables(URL))
N_no =|;|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare 可以自己修改怀疑是注入操作的字串
N_noarray = split(LCase(N_no)|)
Call DBopen()
Call N_check_Qs()
Call N_checkPage()
Call DBCLose()
检测当前页是否是特殊页是就调用 N_check_form()
sub N_checkPage()
set N_rs = serverCreateObject(ADODBRecordSet)
N_rsopen select * from page where spcpage like %
if(N_rseof AND N_rsBof) then
Call N_check_form()
end if
N_rsClose()
set N_rs = nothing
end sub
检测给定字串
sub N_sql(agsql)
这里是不记录数据库如果要改请自己修改
N_check CUSreq_QsOTHER
end sub
检测RequestForm
sub N_check_form()
If RequestForm Then
For Each req_F In RequestForm
N_check req_FRequestForm(req_F)POST
Next
end if
end sub
检测RequestQueryString
sub N_check_Qs()
If RequestQueryString Then
For Each req_Qs In RequestQueryString
N_check req_QsRequestQueryString(req_Qs)GET
Next
end if
end sub
检测
sub N_check(agagsqlsqltype)
For N_i= To Ubound(N_noarray)
If Instr(LCase(agsql)N_noarray(N_i)) Then
call N_regsql(agagsqlsqltype)
ResponseWrite MO
end if
Next
end sub
记录并停止输出
ag 名称
agsql 内容
sqltype 类型
sub N_regsql(agagsqlsqltype)
if(sqltypeOTHER) then
ConnExecute(insert into SqlIn(Sqlin_IPSqlIn_WebSqlIn_FSSqlIn_CSSqlIn_SJ) values(
end if
ResponseWrite
ResponseWrite 非法操作!系统做了如下记录↓
ResponseWrite 操作IP
ResponseWrite 操作时间
ResponseWrite 操作页面
ResponseWrite 提交方式
ResponseWrite 提交参数
ResponseWrite 提交数据
Responseend
end sub
Sub DBopen()
N_dbstr=DBQ=+servermappath(Sqlmdb)+;DefaultDir=;DRIVER={Microsoft Access Driver (*mdb)};
Set Conn=ServerCreateObject(ADODBCONNECTION)
Connopen N_dbstr
end SUB
Sub DBCLose()
Connclose
Set Conn = Nothing
End sub