2010-03-08 10 views
0

J'ai quelques Regex, il ressemble à ceci:Simple question regex (C#, SQL Server)

string regexForDrop = @"^((%27)|'|(\-\-))\s*(d|%64|%44)(r|%72|%52)(o|%6F|%4F)(p|%70|%50)$"; 

Il fonctionne très bien, quand j'écris à l'entrée "--drop", mais il ne fonctionne , quand j'écris "drop table users" ou quelque chose comme ça. J'ai besoin que ça marche, peu importe ce qui vient après "--drop". Comment je peux mettre en œuvre cela?

Merci

+2

Essayez-vous d'empêcher les attaques par injection SQL ici? – FrustratedWithFormsDesigner

+4

Je déconseille vivement d'utiliser une regex comme méthode de sécurité pour l'injection SQL. C'est une recette pour se faire pirater – JaredPar

+3

Même si cela fonctionne pour "--drop", qu'en est-il de "--truncate" ou de toute autre mauvaise chose que quelqu'un pourrait faire. –

Répondre

2
string regexForDrop = @"^((%27)|'|(\-\-))\s*(d|%64|%44)(r|%72|%52)(o|%6F|%4F)(p|%70|%50).*$"; 

? ou sans le $

+0

Génial. Je vous remercie ! – Vytas999

+0

+1, quelle que soit la raison @ Vytas999, vous avez écrit le code pour le résoudre –

6

Il vous semble essayer d'empêcher une attaque par injection SQL. Pour cela, utilisez les requêtes paramétrées de cette façon, vous n'avez pas besoin de vérifier les injections.

Bonne lecture:
http://weblogs.asp.net/scottgu/archive/2006/09/30/Tip_2F00_Trick_3A00_-Guard-Against-SQL-Injection-Attacks.aspx

+0

+1, quelles autres instructions 'mauvaises' la regex manquera-t-elle? –

+0

Oui, je sais à propos de SP, je fais juste quelques recherches pour des études sur regex à. Merci pour le lien, je le lirais. – Vytas999

1

Supprimez le '$' à la fin de votre expression régulière. $ correspond à la fin de la chaîne d'entrée.