J'ai une mauvaise situation ici. Je suis coincé avec le serveur de commerce, qui ne fait pas beaucoup de désinfection/paramétrage.Requêtes paramétrées/sans/en utilisant les requêtes
Je tente de créer mes requêtes pour empêcher l'injection SQL, mais certaines choses comme la clause search/where sur l'objet de recherche doivent être construites, et il n'y a pas d'interface paramétrée.
Fondamentalement, je ne peux pas paramétrer, mais j'espérais pouvoir utiliser le même moteur pour BUILD mon texte de requête si possible. Existe-t-il un moyen de le faire, en dehors de l'écriture de mon propre moteur de paramétrage qui ne sera probablement pas aussi bon que les requêtes paramétrées?
Mise à jour: Exemple
La clause where doit être construit comme une requête SQL where essentiellement:
CatalogSearch search = /// Create Search object from commerce server
search.WhereClause = string.Format("[cy_list_price] > {0} AND [Hide] is not NULL AND [DateOfIntroduction] BETWEEN '{1}' AND '{2}'", 12.99m, DateTime.Now.AddDays(-2), DateTime.Now);
* exemple ci-dessus est la façon dont vous affiner la recherche, mais nous avons fait quelques tests, cette chaîne est PAS DÉSINFECTUE.
C'est là que réside mon problème, parce que n'importe laquelle de ces entrées dans le format .Format pourrait être saisie par l'utilisateur, et bien que je puisse nettoyer facilement mes entrées de boîtes de texte, je vais la nature des choses. Je n'ai pas l'option ici pour utiliser une requête paramétrée parce que Commerce Server a une logique descendante folle dans la façon dont il gère l'ensemble extensible de champs (schéma) & les mots de recherche en texte libre sont pré-compilés quelque part. Cela signifie que je ne peux pas aller directement aux tables sql
Ce que je/amour/à voir est quelque chose le long des lignes de:
SqlCommand cmd = new SqlCommand("[cy_list_price] > @MinPrice AND [DateOfIntroduction] BETWEEN @StartDate AND @EndDate");
cmd.Parameters.AddWithValue("@MinPrice", 12.99m);
cmd.Parameters.AddWithValue("@StartDate", DateTime.Now.AddDays(-2));
cmd.Parameters.AddWithValue("@EndDate", DateTime.Now);
CatalogSearch search = /// constructor
search.WhereClause = cmd.ToSqlString();
(c'était une bonne idée de souligner votre scénario, et pourquoi vous ne pouvez pas utiliser les paramètres, merci) –
Pouvez-vous nous donner un exemple de ce que/comment vous essayez d'accomplir avec cela? –