Ciao,
volevo sapere se queste due funzioni possono bastare a verificare i dati in input nelle varie pagine asp
codice:
Const Numero = 1
Const Testo = 2
Const Data = 3
Function checkVar(variabile, tipoDato, maxGrandezzaCampo)
' funzione per controllo variabili in base al tipo
' variabile - valore da controllare
' tipoDato - tipo del valore da controllare e può essere Numero - Testo - Data
' maxGrandezzaCampo - se numero il tipo di dato di variabile, se testo la lunghezza massima della stringa, se data ""
' se 0-200 un rage che deve contenere valore
ON ERROR RESUME NEXT
err.Clear
'varType https://stackoverflow.com/questions/3281355/get-the-type-of-a-variable-in-vbscript
select case tipoDato
case Numero
'controllo se la variabile e' un numero
if isNumeric(variabile) then
if maxGrandezzaCampo = vbInteger then variabile = CInt(variabile)
if maxGrandezzaCampo = vbLong then variabile = CLng(variabile)
if maxGrandezzaCampo = vbSingle then variabile = CSng(variabile)
if maxGrandezzaCampo = vbDouble then variabile = CDbl(variabile)
if maxGrandezzaCampo = vbCurrency then variabile = CCur(variabile)
if maxGrandezzaCampo = vbByte then variabile = CByte(variabile)
if Err.Number > 0 then
checkVar = False
else
if VarType(variabile) = maxGrandezzaCampo then
checkVar = True
else
if InStr(maxGrandezzaCampo,"-") > 0 then
valTmp = split(maxGrandezzaCampo, "-")
valoreMinimo = CLng(valTmp(0))
valoreMassimo = CLng(valTmp(1))
if (CLng(variabile) < valoreMinimo) OR (CLng(variabile) > valoreMassimo) then
checkVar = false
else
checkVar = true
end if
else
esitoOp "Valore maxGrandezzaCampo non valido",""
end if
end if
end if
else
checkVar = false
end if
case Testo
'controllo se la variabile e' un testo
if varType(variabile) = vbString then
if len(variabile) <= maxGrandezzaCampo then
checkVar = True
else
checkVar = False
end if
else
checkVar = False
end if
case Data
'controllo se la variabile e' una data
if isDate(variabile) then
checkVar = true
else
checkVar = false
end if
end select
err.Clear
End Function
codice:
Function no_SQLinject(campo, valoriDaEscludere)
'Blocca tentativi di SQL injection
'campo valore da testare
'valoriDaEscludere caratteri o stringa da escludere dal controllo separati da | es "'|=|select"
Stringa_originale = campo
if InStr(valoriDaEscludere,"=") = 0 then
myString = ReplaceAllByExpression(campo, "=", "")
end if
if InStr(valoriDaEscludere,"'") = 0 then
myString = ReplaceAllByExpression(campo, "'", "")
end if
'myString = ReplaceAllByExpression(campo, """", "")
myString = ReplaceAllByExpression(campo, " OR ", "")
myString = ReplaceAllByExpression(campo, " AND ", "")
myString = ReplaceAllByExpression(campo, "--", "")
myString = ReplaceAllByExpression(campo, ";", "")
myString = ReplaceAllByExpression(campo, "SELECT", "")
myString = ReplaceAllByExpression(campo, "INSERT", "")
myString = ReplaceAllByExpression(campo, "UPDATE", "")
myString = ReplaceAllByExpression(campo, "DELETE", "")
myString = ReplaceAllByExpression(campo, "DROP", "")
myString = ReplaceAllByExpression(campo, "UNION ALL", "")
myString = ReplaceAllByExpression(campo, "GROUP BY", "")
myString = ReplaceAllByExpression(campo, "HAVING", "")
myString = ReplaceAllByExpression(campo, "ORDER BY", "")
myString = ReplaceAllByExpression(campo, "XP_", "")
myString = ReplaceAllByExpression(campo, "-SHUTDOWN", "")
myString = ReplaceAllByExpression(campo, "\(", "")
myString = ReplaceAllByExpression(campo, "\)", "")
if InStr(valoriDaEscludere,">") = 0 then
myString = ReplaceAllByExpression(campo, ">", "")
end if
if InStr(valoriDaEscludere,"<") = 0 then
myString = ReplaceAllByExpression(campo, "<", "")
end if
if Stringa_originale = myString then
no_SQLinject = myString
else
no_SQLinject = false
end if
end Function
secondo voi serve ancora usare le query parametriche, si possono ancora migliorare?
saluti e grazie delle info