以下に示す関数/コードを使用して、ClassicASPに入力検証を追加しようとしています。正しく機能しているように見えるのは「テキスト」タイプだけです。他の人はエラーが発生し続けるか、正しくフィルタリングされません。私は自分が間違っていることを理解しようとしています。助けてください。
有効なデータ型:「email」、「integer」、「date」、「string」、「text」。最初の3つは明らかですが、最後の2つにはわずかな違いがあります。
「メール」では、数字と文字、および次の文字「@」、「-」、「。」、「_」のみを許可する必要があります。
「日付」はIsDateを実行して検証する必要があり、Trueの場合は、Falseが許可しない場合に許可します。
「文字列」は、テキストベースのクエリ文字列を検証する必要があり、文字、数字、_、-、および。のみを許可します。
一方、「テキスト」は任意の自由形式のテキスト形式のフィールドタイプのコンテンツです。
「整数」は、数字とピリオド(。)のみを許可する必要があります
使用例: <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
他の2つは私にこのエラーメッセージを与えます:
<%= MakeSafe( "test@test.com1234.5"、string、50)%>
*エラー!!! 引数の数が間違っているか、プロパティの割り当てが無効です:'string'
<%= MakeSafe( "test@test.com1234.5"、integer、50)%>
*エラー!!! 構文エラー
あなたが提供するどんな助けにも本当にありがとう...