今天得知SIPO的网站被黑,发现居然和我还是有些关系的,还是先看看这则函数:
'*********************************************************
' 目的: 检查参数
' 返回: 出错则转到ShowError(3)
'*********************************************************
Function CheckParameter(byRef source,strType,default)
On Error Resume Next
If strType="int" Then
'数值
If IsEmpty(source) Then
source=default
ElseIf IsNumeric(source) Then
source=CLng(source)
ElseIf source="" Then
source=default
Else
Call ShowError(3)
End if
If Err.Number<>0 Then Call ShowError(3)
CheckParameter=True
ElseIf strType="dtm" Then
'日期
If IsEmpty(source) Then
source=default
ElseIf IsDate(source) Then
source=CDate(source)
ElseIf source="" Then
source=default
Else
Call ShowError(3)
End if
If Err.Number<>0 Then Call ShowError(3)
CheckParameter=True
ElseIf strType="sql" Then
'SQL
source=CStr(Replace(source,chr(39),chr(39)&chr(39)))
Else
Call ShowError(0)
End If
End Function
'*********************************************************
这则函数是取自Z-Blog的c_function.asp文件,Sipo的用法是这样的:
Call CheckParameter(Request("s_title"),"sql",1)
,不知大家发现有没有什么问题。
函数的第一个形参是标记byRef的,也就是传入引用,但Sipo放入的Request("s_title"),Request是系统组件,Request("s_title")是不能被赋值的,系统也不会报错,也就产生了SQL过滤无效的问题。
另外,函数本身也可以修改,如果不用去传值,而直接将过滤好的值做为返回值返回给变量,也就没有这个问题了,就象c_function.asp中的另一个函数FilterSQL一样,我本人是只用FilterSQL过滤的。
所以忽视了细节问题,还是会出大麻烦的。
这几天还看了点.Net的东东,什么接口、反射,委托、还有泛型等,有点头大,发现从一个极端走向另一个极端:设计过度,过于追求完美的设计模式,也未必是件好事,CommunityServer还是非常的复杂的。