2

以下に示す関数/コードを使用して、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,"&", "&#38;")
encodeData = replace(encodeData,"'", "&#39;")
encodeData = replace(encodeData,"""", "&quot;")
encodeData = replace(encodeData,">", "&gt;")
encodeData = replace(encodeData,"<", "&lt;")
encodeData = replace(encodeData,")", "&#41;")
encodeData = replace(encodeData,"(", "&#40;")
encodeData = replace(encodeData,"]", "&#93;")
encodeData = replace(encodeData,"[", "&#91;")
encodeData = replace(encodeData,"}", "&#125;")
encodeData = replace(encodeData,"{", "&#123;")
encodeData = replace(encodeData,"--", "&#45;&#45;")
encodeData = replace(encodeData,"=", "&#61;")
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)%>

*エラー!!! 構文エラー

あなたが提供するどんな助けにも本当にありがとう...

4

1 に答える 1

4

タイプミスでない場合は、関数呼び出しの2番目のパラメーターに問題があります。

次のように関数を呼び出します。

<%=MakeSafe("test@test.com1234.5",email,50)%>

2番目のパラメータも「...」する必要があるため、これは間違っています。これは機能するはずです:

<%=MakeSafe("test@test.com1234.5","email",50)%>
于 2012-08-16T03:07:16.597 に答える