Maison  >  Article  >  php教程  >  Une brève discussion sur la différence entre # et $ dans mybatis et comment empêcher l'injection SQL

Une brève discussion sur la différence entre # et $ dans mybatis et comment empêcher l'injection SQL

高洛峰
高洛峰original
2017-01-05 17:21:491878parcourir

La différence entre # et $ dans mybatis

1 #Traitez les données entrantes comme une chaîne et ajoutez un guillemet double aux données entrantes automatiquement. Par exemple : trier par #user_id#, si la valeur transmise est 111, alors la valeur analysée dans SQL est triée par "111". Si la valeur transmise est id, le SQL analysé est trié par "id". 🎜> 
2. $ affichera directement les données entrantes et les générera en SQL. Par exemple : order by $user_id$, si la valeur transmise est 111, alors la valeur analysée dans SQL est order by user_id. Si la valeur transmise est id, le SQL analysé est order by id.
 3. #Method peut empêcher l'injection SQL dans une large mesure.
 
4. La méthode $ ne peut pas empêcher l'injection SQL.

5. La méthode $ est généralement utilisée pour transmettre des objets de base de données, tels que des noms de table

 
6. >
Empêcher l'injection SQL

Remarque : n'écrivez pas l'instruction SQL sous la forme select * from t_stu où s_name comme '%$name$%', qui est extrêmement vulnérable aux attaques par injection.

Les paramètres au format "${xxx}" participeront directement à la compilation SQL, les attaques par injection ne pourront donc pas être évitées. Mais lorsqu'il s'agit de noms de tables et de colonnes dynamiques, seuls les formats de paramètres tels que "${xxx}" peuvent être utilisés.

Lors de la rédaction de l'instruction de mappage de mybatis, essayez d'utiliser le format "#{xxx}". Si vous devez utiliser des paramètres tels que "${xxx}", vous devez les filtrer manuellement pour empêcher les attaques par injection SQL.

Exemple

<sql id="condition_where"> 
  <isNotEmpty property="companyName" prepend=" and "> 
    t1.company_name like #companyName# 
  </isNotEmpty> 
</sql>

Le code Java est presque le même que celui d'origine. Il n'y a rien de mal à cela. Si vous trouvez cela gênant, encapsulez simplement null et '%' dans une méthode

if (!StringUtil.isEmpty(this.companyName)) { 
  table.setCompanyName("%" + this.companyName + "%"); 
}

Ce qui précède est une brève présentation de mybatis qui vous est présentée par l'éditeur La différence entre # et $ dans MyBatis et la méthode pour empêcher l'injection SQL sont toutes couvertes. J'espère que tout le monde soutiendra le site Web PHP chinois ~

En savoir plus sur la différence entre # et $ dans MyBatis et le méthode pour empêcher l'injection SQL. Veuillez faire attention aux articles sur le site Web chinois PHP !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn