Après mon précédent post sur ajax ou @artragis me disait à juste titre que mon code, en l'état, était vulnérable aux injections de sql :x
1 2 3 4 5 6 7 8 9 10 11 12 | [HttpPost] public ActionResult CheckReturn(TitreWrapper titreWrap) { string titre = titreWrap.titre; var contexte = new intranetEntities(); var ajax = contexte.evenementiel.SqlQuery("SELECT * FROM evenementiel WHERE titrebri_evenementiel LIKE '%"+ titre +"%' ORDER BY datecreation_evenementiel DESC;"); ViewBag.ajax = ajax; return PartialView(); } |
effectivement, il l'est, donc j'ai cherché et découvert les "Parameterized Queries" c'est à dire les requêtes paramètrées. Et pour l'implémentation, ça coince J'ai commencé par faire ça :
1 2 3 4 5 6 7 | string titre = titreWrap.titre; SqlParameter[] param = new SqlParameter[1]; param[0] = new SqlParameter("@titre", titre); var contexte = new intranetEntities(); var ajax = contexte.evenementiel.SqlQuery("SELECT * FROM evenementiel WHERE titrebri_evenementiel LIKE '%@titre%' ORDER BY datecreation_evenementiel DESC;"); |
mais ça marchait pas, le "@titre" n'est pas reconnu comme une variable, alors j'ai aussi essayé ça :
1 2 3 4 5 6 7 | string titre = titreWrap.titre; SqlParameter[] param = new SqlParameter[1]; param[0] = new SqlParameter("@titre", titre); var contexte = new intranetEntities(); var ajax = contexte.evenementiel.SqlQuery("SELECT * FROM evenementiel WHERE titrebri_evenementiel LIKE '%" + param[0] +"%' ORDER BY datecreation_evenementiel DESC;"); |
(ç'aurait été idiot si ça avait marché mais bon.....)
enfin, je sais qu'il existe des façons de faire avec LINQ, ou d'autres trucs mais ça me forcerait à réécrire tout ou partie de mon code (ce que je veux éviter)
Quelqu'un sait ce que je dois faire ?
EDIT : J'ai trouvé le LINQ, réussi à faire ça :
1 | var ajax = contexte.evenementiel.Where(x => x.titrebri_evenementiel.Contains(titre)).OrderByDescending(x => x.datecreation_evenementiel); |
qui… marche ? les injections semblent ne pas passer mais les résultats de cette requête ne sont pas les mêmes qu'avec SQL, du coup j'aime pas trop :/