Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    324

    Check variabili in input

    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
    Da un grande potere derivano grandi responsabilità

  2. #2
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    579
    Questo per evitare che i campi input text contengano valori non voluti o SQL iniection? mi sembra troppo codice...
    E' meglio che il campo in input sia bloccato a prendere solo i caratteri validi per quel campo per esempio su un campo di input numerico se il cursore è su quel campo abilitare solo i numeri da 0 a 9 , il punto e la virgola....poi controlli il campo dopo l'input...
    questo lo puoi fare direttamente dal form in Javascript e inviare il form con il submit al posto dellla chiamata diretta dalla input http del browser e usare le querystring....che potrebbero fare SQL iniection... dalla barra http...bloccare l'avvio di programmi asp senza sessione attivata a meno che non sia il form di login dove comunque deve venire controllato l'input.
    lo stesso controllo si puo fare sui campi TEXT e Date ... lo stesso per i caratteri validi...
    bloccando i campi all'origine i programmi asp avranno da fare meno lavoro sporco e dedicarsi di piu agli algoritmi del programma.
    Vic53

  3. #3
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    324
    Si faccio anche i controlli con javascript, ma serve soltanto per dimenticanze da parte dell'utente ad inserire i dati.
    I controlli da client non sono particolarmente utili dato che possono essere sempre bypassati ed e' quindi obbligatorio effettuare il controllo lato server, quelle due funzioni le uso ovunque ci sia un request o request.form
    Da un grande potere derivano grandi responsabilità

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2022 vBulletin Solutions, Inc. All rights reserved.