Salut !
je voudrais savoir comment faire pour proteger mon site contre les injections SQL ?
sachant que des parametres (id) passe par GET
j'utilise Mysql5
Merci ^^
Salut !
je voudrais savoir comment faire pour proteger mon site contre les injections SQL ?
sachant que des parametres (id) passe par GET
j'utilise Mysql5
Merci ^^
Bien mais sur quoi repose ta couche d'accès aux données ?
C'est assez simple (quelque soit la manière dont tu accèdes aux données).
Pour cela :
IL NE FAUT PAS FAIRE :
SELECT * FROM users where login='toto' and password='totoestun...';
If(il existe une ligne de resultat de la requete ci-dessus) {Alors l'utilisateur est authentifié;}
IL EST CONSEILLER DE FAIRE :
SELECT * FROM users where login='toto'
If(le login du résultat est egal à celui de la requete et si le mot de passe du resultat est egal à celui de la requete) {Alors l'utilisateur est authentifié}
C'est le minimum vital.
Pour le reste. un rapide coup d'oeil sur google te donnera plein d'informations.
PPDL
Pas besoin de se prendre la tête la dessus si on utilise des PreparedStatementEnvoyé par petitpasdelune
je debute sur J2EE et JDBC , je connais pas trop
je vous met le code d'une de mes pages par exemple :
(c'est du jsp , les servlet j'ai jamais comprit comment ca marchais mais j'aimerais bien en faire :p)
Par exemple mon script pour afficher une page :
la connexion se fait dans le header automatiquement inclus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 <?xml version="1.0" encoding="ISO-8859-1" ?> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" import="java.sql.*" import="javax.sql.*" import="java.io.*" import="java.util.*"%> <% Statement data = db.createStatement(); String Article_ID = request.getParameter("key"); ResultSet myArticle = data.executeQuery("select * from articles where id ="+ Article_ID); myArticle.next(); String Titre = myArticle.getString(2); String Texte = myArticle.getString(3); data.close(); %> <table class="doctable" cellpadding="2" cellspacing="2"> <tbody> <tr> <td class="indoctable"> <b><%=Titre%></b> <div class="boutons_manager_article"><a href="/Manage/Edit.Article.jsp?key=<%=Article_ID%>"><img src="/Template/Icons/edit.png"/></a><a href="/Manage/Delete.Article.jsp?key=<%=Article_ID%>"><img src="/Template/Icons/delete.png"/></a></div> </td> </tr> <tr> <td><%=Texte%></td> </tr> </tbody> </table>
c'est pas securisé ? :p
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" import="java.sql.*" import="javax.sql.*" import="java.io.*" import="java.util.*"%> <% String DbUrl = "jdbc:mysql://localhost:3306/web"; String DbUser = "root"; String DbPass = "********"; Class.forName("com.mysql.jdbc.Driver"); Connection db = DriverManager.getConnection(DbUrl,DbUser,DbPass); %>
que faut-il faire ?
dois-je aussi securiser mes pages qui sont deja un accés qui nessecite une authentification ? (utilisateurs Tomcat) (/Manage/ ici )
En quoi la précompilation de PreparedStatement empeche une attaque de type "injection SQL" ?Envoyé par Ricky81
PPDL
Déjà grâce a ce petit lien :
http://www.owasp.org/index.php/SQL_I...on_Cheat_Sheet
En fait, si tu utilises un PreparedStatement, il ne faut pas construire la requête sql en concaténant les paramètres mais utilisé des requêtes 'paramétrés'.
Exemple :
String username = request.getParameter("ton_parametre");
// ici tu peux déjà filtrer pour voir si ton paramètre est correct
String query = "SELECT droits FROM auth WHERE user_name = ? ";
PreparedStatement p = connection.prepareStatement( query );
p.setString( 1, username);
ResultSet results = p.executeQuery();
Tout est là pour les preparedStatement. Si tu passe toutes tes données recues de l'utilisateur via des prepared statement, aucun soucis d'injection
http://java.developpez.com/faq/jdbc/...paredstatement
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager