2010-01-12 5 views
1

J'ai un formulaire mis en place où les utilisateurs peuvent entrer leur réservation pour une chambre à mon collège. Je veux valider l'entrée de l'utilisateur pour éviter l'injection SQL (mon programme utilise une base de données MS Access) et aussi arrêter les numéros et les synbols dans leur nom, etc.Faire beaucoup de validation d'entrée dans VB.NET

Je peux bien faire la validation, mais il doit y avoir beaucoup de validation et ensuite les méthodes exécutées seulement si tous les tests de validation reviennent comme vrai. J'ai eu quelque chose comme ceci:

If txtName.Text = "" Then 
    frmBookErr.SetError(txtName, "Name field cannot be left blank.") 
    fail = 1 
Else 
    frmBookErr.SetError(txtName, "") 
    fail = 0 
End If 

Et puis vérifiez la variable fail, mais il obtient évidemment réécrite plus tard sous la forme si l'un des tests de validation reviennent aussi vrai.

Quelqu'un peut-il fournir une contribution à cela? Merci.

+1

Cela ne va pas aider vos problèmes d'injection SQL, mais par défaut la variable échouent à le début de la fonction est égal à 0, puis ne le placez dans le reste du code qu'à 1 lorsque quelque chose échoue. Il ne sera pas écrasé alors. – Walter

Répondre

1

Si vous voulez éviter l'injection SQL, utilisez des requêtes SQL paramétrées ou des procédures stockées et ne construisez pas de SQL par concaténation.

+0

Notez que si les procédures stockées utilisent la concaténation, vous n'êtes pas plus avancé. –

+0

D'où "et ne construisez pas SQL par concaténation" ... –

0

Pour éviter les injections SQL, vous devez utiliser quelque chose qui n'autorise pas directement les modifications dans la requête SQL. Maintenant, cela ne signifie pas que vous ne pouvez pas fournir de valeurs, cela signifie que vous spécifiez fortement les types que vous souhaitez traiter sur le serveur.

Example from CodeProject

string commandText = "SELECT * FROM Customers "+ 
    "WHERE [email protected]"; 
SqlCommand cmd = new SqlCommand(commandText, conn); 
cmd.Parameters.Add("@CountryName",countryName); 

Au lieu de fournir le countrName comme concated string, vous dites réellement votre Sql commande que vous fournissez comme paramètre, ce qui permettra pas de tout changement dans la requête elle-même.

1

Définir votre échec variable au début de la procédure à 0 puis réglez seulement à 1 si quelque chose ne ...

fail = 0 
    If txtName.Text = "" Then 
     frmBookErr.SetError(txtName, "Name field cannot be left blank.") 
     fail = 1 
    End If 
    If txtSomethingElse.Text = String.Empty Then fail = 1 
    If fail = 0 Then frmBookErr.Clear() 
Questions connexes