2009-06-01 10 views
1

Existe-t-il un projet/dll .Net qui prend en charge l'échappement de l'entrée fournie par l'utilisateur aux requêtes de base de données pour divers systèmes de base de données?Echappement des requêtes SQL - prise en charge de différentes plates-formes de base de données dans .Net

Je voudrais que toute notre équipe standardise et utilise un module pour effectuer l'échappement de l'entrée fournie par l'utilisateur qui sera ensuite utilisée dans les requêtes SQL paramétrées. Idéalement, je voudrais spécifier le système de base de données (Oracle, SqlServer, mySql, etc.) dans le fichier de configuration et être capable d'appeler Escape (variableName) et il échapperait le contenu de la chaîne en fonction du paramètre de base de données en cours dans le fichier web.config.

Sinon, la meilleure chose serait quelque chose comme EscapeForOracle, EscapeForSqlServer, etc.

Au minimum, le projet devrait soutenir Oracle, SqlServer et Mysql.

Je me demande si je dois le créer en interne ou s'il existe un produit commercial/open source existant pour ce faire.

+0

Vous dites "requêtes SQL paramétrées", et vous parlez d'échappement. Pas sûr de ce que tu veux dire par là. Pourriez-vous donner des exemples précis de ce que vous voulez accomplir? Je pourrais avoir le code de départ que vous pourriez utiliser si vous voulez suivre la voie du développement interne. –

+0

Lasse a raison: si vous utilisez des paramètres pour toutes vos données fournies par l'utilisateur (et que vous ne construisez pas de SQL dynamique dans un SP), vous n'avez pas besoin d'y échapper - c'est tout. –

+0

On dirait que j'ai trouvé un projet qui fait quelque chose de similaire: ESAPI (http://code.google.com/p/owasp-esapi-dotnet/). Malheureusement, à ce stade, il ne prend en charge que Oracle et MySql et pas SqlServer. Plus d'informations sont disponibles à: http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_3:_Escaping_all_User_Supplied_Input Mais je suis d'accord - si vous utilisez des requêtes paramétrées - il semble que quelque chose comme ça ne devrait pas être nécessaire . Plus d'infos: http://www.owasp.org/index.php/ESAPI –

Répondre

2

Je ne pense pas que vous aurez besoin d'une telle chose. Lors de l'exécution d'une requête/procédure stockée paramétrée, utilisez une collection de paramètres.
Spécifiez le type de données approprié, la longueur, la précision & indiquez une valeur valide.
L'échappement sera effectué par le fournisseur de la base de données. Faites-moi savoir, si je n'ai pas bien compris votre question.

0

Dans .NET, vous pouvez utiliser les classes génériques comme DbReader et DbConnection au lieu de SqlConnection. Comme shahkalpesh et Lasse V. Karlsen l'ont dit, vous pouvez utiliser des paramètres et le framework ou le driver va gérer l'échappement pour vous. Mais en pratique, si vous souhaitez développer un produit pour Oracle et Sql Server, vous parlez de frais généraux MAJOR. S'échapper correctement n'est que la pointe de l'iceberg. Si vous n'avez pas installé de serveur de test Oracle et Sql Server, vous n'avez probablement même pas démarré :)

+0

C'est ce que je voulais dire par mon commentaire à sa question, il doit préciser plus clairement ce qu'il veut. S'il parle d'être à écrire un produit avec un ensemble d'instructions SQL qui fonctionnent de la même manière à travers les moteurs de base de données, il a besoin de code entre les deux qui gère les différences. Mais s'il veut juste dire "échapper des valeurs de paramètres" où "paramètres" ne sont pas vraiment des paramètres, alors c'est différent. –