وبلاگ تخصصي برنامه نويسي با VB

Server-Side ActiveX Dll Programming - بخش هفتم


تابع بررسی وجود sql-injection که در قسمت قبل در آن صحبت کرديم بصورت زير است :

Private Function makesInjection(ByVal query As String) As Boolean
   Dim specialCharacters() As String
   Dim inQoute As Boolean
   specialCharacters = "-- ;,"
   inQoute = False
   For i = 1 To Len(query)
      Char = Mid(query, i, 1)
      If Mid(query, i, 1) = "'" And inQoute = False Then
         inQoute = True
         GoTo EndFor
      End If
      If Mid(query, i, 1) = "'" And inQoute = True Then
         inQoute = False
         GoTo EndFor
      End If
      If inQoute = False Then
         For Index = 1 To UBound(specialCharacters)
            schar = specialCharacters(Index)
            cchar = Mid(query, i, Len(schar))
            If schar = cchar Then
              Exit For
            End If
         Next
         If Index < UBound(specialCharacters) Then
            makesInjection = True
            Exit Function
         End If
      End If
     
EndFor:
        Next
    If inQoute = True Then
      makesInjection = True
    Else
      makesInjection = False
    End If
End Function

ورودی اين تابع query شما و خروجی آن false ياtrue است .
عملکرد تابع بصورت زير است :
اين تابع در طول رشته query شروع به حرکت می کند و هر کاراکتر از آنرا بررسی می نمايد . در صورتيکه کاراکتر جاری ‘ باشد و داخل ‘ ’ نباشيم  متغير مربوط به آن true شده و حلقه يکی بجلو می رود . اما در صورتيکه کاراکتر جاری ‘ باشد و داخل ‘ ’ باشيم متغير مربوط به  آن false شده و حلقه يکی بجلو می رود . سرانجام در صورتيکه داخل ‘ ’ نباشيم  بررسی می شود که اين کاراکتر يکی از کاراکترهای غير مجاز ( کاراکترهای موجود در رشته specialCharacters ) نباشد که اگر باشد تابع true بر می گرداند .
پس از اتمام حلقه متغير مربوط به ‘ بررسی می شود که اگر true باشد در صورت injection وجود داسته و تابع نيز true بر می گرداند .

 

+ حامد شیدائیان ; ۱٢:٤۳ ‎ب.ظ ; شنبه ٤ امرداد ،۱۳۸٢
comment نظرات ()