Maison  >  Article  >  Java  >  Comment empêcher l'injection SQL en Java

Comment empêcher l'injection SQL en Java

青灯夜游
青灯夜游original
2019-05-06 17:31:144690parcourir

L'injection SQL est l'une des méthodes d'attaque réseau les plus courantes. Il n'exploite pas les bogues du système d'exploitation pour mener des attaques, mais cible la négligence des programmeurs lors de la programmation. Des utilisateurs peu scrupuleux profitent des failles de SQL et utilisent des instructions SQL pour se connecter sans compte ou même falsifier la base de données. L'article suivant vous présentera plusieurs méthodes pour empêcher l'injection SQL en Java. J'espère qu'il vous sera utile.

Comment empêcher l'injection SQL en Java

Le moyen le plus simple d'empêcher l'injection SQL en Java est d'éliminer l'épissage SQL. Les attaques par injection SQL réussissent car une nouvelle logique est ajoutée à l'instruction SQL d'origine. Si PreparedStatement est utilisé à la place de Statement pour exécuter l'instruction SQL et que seuls les paramètres sont saisis, la méthode d'attaque par injection SQL sera inefficace.

Voyons comment empêcher l'injection SQL en Java :

1. Utilisez un ensemble d'instructions précompilé, qui a la capacité intégrée de gérer l'injection SQL. Utilisez simplement Sa méthode setString peut transmettre une valeur :

String sql= "select * from users where username=? and password=?;
PreparedStatement preState = conn.prepareStatement(sql);
preState.setString(1, userName);
preState.setString(2, password);
ResultSet rs = preState.executeQuery();

2. Utilisez des expressions régulières pour remplacer les instructions contenant des guillemets simples ('), des points-virgules (;) et des symboles de commentaire (--) pour empêcher l'injection SQL. Exemple :

public static String SQL(String str)
{
return str.replaceAll(".*([';]+|(--)+).*", " ");
}
userName=SQL(userName);
password=SQL(password);
String sql="select * from users where username='"+userName+"' and password='"+password+"' "
Statement sta = conn.createStatement();
ResultSet rs = sta.executeQuery(sql);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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