我正在尝试使用下面看到的函数/代码在经典 ASP 中添加一些输入验证。唯一看起来正常工作的是“文本”类型。其他我不断收到错误,或者它只是没有正确过滤。我试图了解我做错了什么,请帮助我。
有效数据类型:“电子邮件”、“整数”、“日期”、“字符串”和“文本”。前三个很明显,后两个略有不同。
“ email ”应该只允许数字和字母,以及以下字符“ @ ”、“ - ”、“ . ”、“ _ ”
“日期”应通过运行 IsDate 进行验证,如果为 True,则允许,如果为 False,则不允许。
“字符串”应该验证基于文本的查询字符串,只允许字母、数字、_、- 和 .
而“ text ”是任何自由格式的文本表单字段类型内容。
“整数”应该只允许数字和句点 (.)
使用示例: <input type="text" value="<%=MakeSafe("test@test.com</HTML>1234.5",integer,50)%>">
例如: MakeSafe(dataInput,dataType,dataLength)
<%
'// CODE BY: dB Masters
'// FOUND AT: http://successontheweb.blogspot.com/2008/03/input-validation-for-security-in.html
Function MakeSafeConvert(encodeData)
encodeData = replace(encodeData,"&", "&")
encodeData = replace(encodeData,"'", "'")
encodeData = replace(encodeData,"""", """)
encodeData = replace(encodeData,">", ">")
encodeData = replace(encodeData,"<", "<")
encodeData = replace(encodeData,")", ")")
encodeData = replace(encodeData,"(", "(")
encodeData = replace(encodeData,"]", "]")
encodeData = replace(encodeData,"[", "[")
encodeData = replace(encodeData,"}", "}")
encodeData = replace(encodeData,"{", "{")
encodeData = replace(encodeData,"--", "--")
encodeData = replace(encodeData,"=", "=")
MakeSafeConvert = encodeData
End Function
Function MakeSafe(dataInput,dataType,dataLength)
Dim regex, validInput, expressionmatch
regex = ""
validInput = "1"
If dataType = "string" And Len(dataInput) > 0 Then
regex = "^[\w-\.]{1,"& dataLength &"}$"
ElseIf dataType = "email" And Len(dataInput) > 0 Then
regex = "^[\w-\.]+@([\w-]+\.)+[\w-]{2,6}$"
ElseIf dataType = "integer" And Len(dataInput) > 0 Then
regex = "^\d{1,"& dataLength &"}$"
ElseIf dataType = "date" And Len(dataInput) > 0 Then
If Not IsDate(dataInput) Then validInput = "0" End If
ElseIf dataType = "text" And Len(dataInput) > 0 Then
If Len(dataInput) > dataLength Then validInput = "0" End If
End If
If Len(regex) > 0 And Len(dataInput) > 0 Then
Set RegExpObj = New RegExp
RegExpObj.Pattern = regex
RegExpObj.IgnoreCase = True
RegExpObj.Global = True
RegExpChk = RegExpObj.Test(dataInput)
If Not RegExpChk Then
validInput = "0"
End If
Set RegExpObj = nothing
End If
If validInput = "1" And Len(dataInput) > 0 Then
MakeSafe = MakeSafeConvert(dataInput)
ElseIf Len(dataInput) = 0 Then
MakeSafe = ""
Else
Response.Write "<h2>Processing Halted.</h2>"
Response.End
End If
End Function
%>
示例代码和错误:
当我使用代码对此进行测试时:
<%=MakeSafe("test@test.com1234.5",email,50)%>
*不验证任何内容。*
我没有收到错误消息,但它不验证任何内容。
**输出为:test@test.com1/27/20121234.5
应该只是:test@test.com**
当我使用代码对此进行测试时:
<%=MakeSafe("test@test.com1/27/20121234.5",date,50)%>
我没有收到错误消息,但它不验证任何内容。
输出是:test@test.com1/27/20121234.5 应该是:1/27/2012
另外两个给我这个错误信息:
<%=MakeSafe("test@test.com1234.5",string,50)%>
*错误!!!错误数量的参数或无效的属性分配:“字符串”
<%=MakeSafe("test@test.com1234.5",整数,50)%>
*错误!!!语法错误
非常感谢您提供的任何帮助...