求助:asp超级链接转递参数的过滤问题

时间:2021-05-13 09:44:57
我用以下链接向文件zxrd.asp传递两个变量PName和ckb_date

http://sekee.com/zxrd.asp?action=modify&PName=%B2%CE%BF%BC%CF%FB%CF%A2&index=1 
http://sekee.com/zxrd.asp?action=modify&PName=风云天下
http://sekee.com/zxrd.asp?action=modify&PName=风云天下&ckb_date=2012-05-04
http://sekee.com/zxrd.asp?action=modify&PName=%B2%CE%BF%BC%CF%FB%CF%A2&ckb_date=2012%2D05%2D04&index=1

为防止SQL注入,加上了GuoLv.asp文件进行过滤,但却把我自己要用的链接也过滤掉了,求助有没有办法即起到过滤作用,又能让我要的以上链接通过?

下面是GuoLv.asp文件的代码:

<%
dim sql_injdata 
SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare" 
SQL_inj = split(SQL_Injdata,"|") 
If Request.QueryString<>"" Then 
 For Each SQL_Get In Request.QueryString 
  For SQL_Data=0 To Ubound(SQL_inj) 
   if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then 
    Response.Write "<Script Language=****>alert('请不要在参数中包含非法字符尝试注入!');history.back(-1)</Script>" 
    Response.end 
   end if 
  next 
 Next 
End If  

If Request.Form<>"" Then 
 For Each Sql_Post In Request.Form 
  For SQL_Data=0 To Ubound(SQL_inj) 
   if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 Then 
    Response.Write "<Script Language=****>alert('请不要在参数中包含非法字符尝试注入!');history.back(-1)</Script>" 
    Response.end 
   end if 
  next 
 next 
end if  
%> 

9 个解决方案

#1


这种过滤方法根本不靠谱,影响正常的功能。你可以去掉|%|

最好的方法是在查询数据的时候使用参数方法,而不是拼接sql语句

#2


用ADO对象插入数据,不要拼接SQL,用不着过滤的。

#3


能否用表ab的例子来说明一下呢?我想在一个页面上显示出表中的日期列表,点击日期则显示出当天全部的数据,请写出数据库连接、查询和数据输出的完整的代码,谢谢
表ab
日期        编号     数据
2014/1/9 1 A
2014/1/9 2 B
2014/1/10 1 C
2014/1/10 2 d

#4


替换掉'就好了吧,构造sql注意验证数据有效性

PName=replace(request.querystring("PName")&"","'","")
ckb_date=request.querystring("ckb_date")&""
if not isdate(ckb_date) then
  response.write "非法的日期"
  response.end
end if
'构造sql语句执行查询

#5


如上表,如果不用链接传递参数应该怎么写呀?

#6


你这个肯定要传参数啊,不传参数你怎么知道调用哪些数据。。你验证好数据有效性就行了

文本类型的字段要去掉'或者替换为'',时间的用isdate判断下,数字就isnumeric判断

#7


请你帮忙写出上面四个链接的数据有效性验证代码好吗?拜托拜托,哈哈,我不会写

#8


晕,#4不是给你代码了,去学下asp基础了,代码给了思路也说了还不会

#9


那个我试着放进去不行

#1


这种过滤方法根本不靠谱,影响正常的功能。你可以去掉|%|

最好的方法是在查询数据的时候使用参数方法,而不是拼接sql语句

#2


用ADO对象插入数据,不要拼接SQL,用不着过滤的。

#3


能否用表ab的例子来说明一下呢?我想在一个页面上显示出表中的日期列表,点击日期则显示出当天全部的数据,请写出数据库连接、查询和数据输出的完整的代码,谢谢
表ab
日期        编号     数据
2014/1/9 1 A
2014/1/9 2 B
2014/1/10 1 C
2014/1/10 2 d

#4


替换掉'就好了吧,构造sql注意验证数据有效性

PName=replace(request.querystring("PName")&"","'","")
ckb_date=request.querystring("ckb_date")&""
if not isdate(ckb_date) then
  response.write "非法的日期"
  response.end
end if
'构造sql语句执行查询

#5


如上表,如果不用链接传递参数应该怎么写呀?

#6


你这个肯定要传参数啊,不传参数你怎么知道调用哪些数据。。你验证好数据有效性就行了

文本类型的字段要去掉'或者替换为'',时间的用isdate判断下,数字就isnumeric判断

#7


请你帮忙写出上面四个链接的数据有效性验证代码好吗?拜托拜托,哈哈,我不会写

#8


晕,#4不是给你代码了,去学下asp基础了,代码给了思路也说了还不会

#9


那个我试着放进去不行