Controllo dati inseriti in campi di testo

martedì 10 febbraio 2009 - 18.05

ravalon Profilo | Expert

Salve, ho usato una funzione che mi controlla che all'interno dei dati inseriti nelle mie textbox non vi siano caratteri che potrebbero essere usati per un SQL Injection o Cross site scripting XSS

Però la forma in cui l'ho scritta, sebbene funzioni perfettamente, non mi sembra elegante.... si può scrivere in modo più compatto e pulito ?

ecco il codice usato


*******************************************
Public Function DataInjectionControl(ByVal strDati As String) As Boolean
DataInjectionControl = False

If InStr(strDati, "'") > 0 Or InStr(strDati, ",") > 0 Or InStr(strDati, ".") > 0 Or InStr(strDati, ";") > 0 Or InStr(strDati, "delete ") > 0 Or InStr(strDati, "truncate ") > 0 Or InStr(strDati, "alter ") > 0 Or InStr(strDati, "drop ") > 0 Or InStr(strDati, "--") > 0 Or InStr(strDati, "<script>") > 0 Or InStr(strDati, "=") > 0 Or InStr(strDati, "<") > 0 Or InStr(strDati, ">") > 0 Or InStr(strDati, "+") > 0 Or InStr(strDati, "-") > 0 Or InStr(strDati, "*") > 0 Or InStr(strDati, "(") > 0 Or InStr(strDati, ")") > 0 Then
DataInjectionControl = True
End If

End Function
*******************************************
Grazie

Jeremy Profilo | Guru

A parte il fatto che, al posto dell'operatore OR, avrei usato l'operatore ORELSE, il quale alla prima occorenza vera non avrebbe neanche valutato le successive.....

A sto giro non accetto che qualcuno mi dica che non è il caso di scomodare le Regex
Per l'appunto.....questo è il giusto caso per l'utilizzo delle Regular Expression...... cerca sulla rete un pò di documentazione a riguardo e se poi, hai bisogno di più info, fatti sentire.

Facci sapere....
Ciao.

balfaz Profilo | Expert

perchè non provi con il controllo RegularExpressionValidator, è fatto a posta per questo lavoro
guarda questo link, e leggi in questo ordine.

http://www.devhood.com/Tutorials/tutorial_details.aspx?tutorial_id=46
http://msdn.microsoft.com/en-us/library/ms972966.aspx

La prima caratteristica che devi implementare per evitare il SQLinjection è quella di evitare di passare i valori dei campi direttamente di un textbox, textarea, o querystring (es. SELECT * FROM MIATBL WHERE CAMPO = '" & TEXTBOX1.text & "'") <- Sbagliato

devi usare i parametri per passare i valori, che sono un po più sicuri.

Se lo stai già facendo ben per te, altrimenti pensaci.....comunque la validazione dei campi e già l'inizio


"Che in questo 2009 i nostri codici possano sconvolgere il mondo."

balfaz Profilo | Expert

OOOooops!, se vede che mi metto sempre troppo tempo in rispondere
"Che in questo 2009 i nostri codici possano sconvolgere il mondo."

ravalon Profilo | Expert

Sto già usando i validator control per verificare se i dati sono numerici, se sono diversi da stringa vuota e via dicendo...insieme all'istruzione Page.isvalid ...

Ho usato il CustomValidato Control per alcuni campi tipo la email, che mi va a richiamare una funzione ah hoc....

però per certe cose, tipo la famosa stringa " ' or 1=1 --' " stavo gestendo tutto via codice con una funzione ad hoc che nel mio caso avrebbe anche il compito di avvertire l'utente che sono stati inseriti caratteri non consentiti nonchè scrivere un log con l'ip di chi ha tentato di passare qualcosa del tipo "DROP TABLE Ecc.ecc."
Ad ogni modo volevo avere una e una sola funzione, richiamabile da dovunque, all'interno di una classe che mi fa questo lavoro senza i validator control che uso solo per cose di base...non so se faccio bene o male...

Sul Regex non c'ho capito nulla.... comunque hai ragione sull' ORELSE

Penso però di avere fatto un codice migliore ....
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5