Zéro SQLi malgré les développeurs

Magazine
Marque
MISC
Numéro
111
Mois de parution
septembre 2020
Domaines


Résumé

Nous proposons une méthode pour effectuer des requêtes SQL qui garantit l'invulnérabilité aux injections SQL, y compris lorsqu'elle est utilisée par un développeur pressé ou incompétent, contrairement aux requêtes paramétrées. Basée sur l'utilisation d'arbres de syntaxe abstraite, elle permet facilement de construire des requêtes dynamiques et est plus facile à mettre en œuvre qu'un ORM. Nous proposons une bibliothèque Java implémentant nos idées, mais la méthode peut s'appliquer à d'autres langages de programmation et d'autres types de requêtes.


La notion de vulnérabilité à des injections SQL est connue depuis plus de 20 ans [1]. La contre-mesure classiquement conseillée contre ce type de faille est également connue depuis longtemps : il suffit d'utiliser des requêtes paramétrées. Pourtant, les injections SQL sont toujours en tête des problèmes de sécurité applicative [2]. Pourquoi ?

Une réponse est le manque de formation des développeurs. Néanmoins, il nous semble que cette réponse mériterait réexamen. Considérons par exemple le code Java présenté dans le listing ci-dessous :

String computeCriterion(String[] fields, String[] values) {
    StringBuffer b = new StringBuffer();
    for (int i = 0; i < Math.min(values.length, fields.length); i++) {
    if (values[i] != null) {
        b.append(" AND " + fields[i] + " = '" + values[i] + "'");
    }
    }
    return b.toString();
}
 
PreparedStatement buildStatement(int y, String[] fields,
                 String[]...
Cet article est réservé aux abonnés. Il vous reste 96% à découvrir.
à partir de 21,65€ HT/mois/lecteur pour un accès 5 lecteurs à toute la plateforme
J'en profite
Références

[1] Rain Forest Puppy. « NT Web Technology Vulnerabilities ». In Phrack Magazine, 8.54, déc. 1998. http://phrack.org/issues/54/8.html

[2] Andrew van der Stock, Brian Glass, Neil Smithline, and Torsten Gigler. « OWASP top 10 - 2017 ». https://owasp.org/www-pdf-archive/OWASP_Top_10-2017_%28en%29.pdf.pdf

[3] Judicaël Courant. « sqltrees: A secure, developper-proof, Java library for querying SQL databases », 2020. https://github.com/Orange-Cyberdefense/sqltrees

[4] E. Gamma, R. Helm, R. Johnson, and J. Vlissides. « Design Patterns: Elements of Reusable Object-Oriented Software ». Addison-Wesley Professional Computing Series. Pearson Education, 1994. ISBN : 978-0-201-63361-0

[5] Kevin Wall and Matt Seil. « The OWASP Enterprise Security API ». https://owasp.org/www-project-enterprise-security-api/

[6] Sebastian Bergmann, Arne Blankerts, and Stefan Priebsch. « Why magic quotes are gone in php 7 ». Août 2017. https://thephp.cc/news/2017/08/why-magic-quotes-are-gone-in-php7

[7] « SQLJ », Wikipedia, The Free Encyclopedia. Mars 2020. https://en.wikipedia.org/w/index.php?title=SQLJ&oldid=945238109

[8] « Embedded SQL », Wikipedia, The Free Encyclopedia. Mars 2020. https://en.wikipedia.org/w/index.php?title=Embedded_SQL&oldid=948412805

[9] R. A. McClure and I. H. Kruger. « SQL DOM: compile time checking of dynamic SQL statements ». In : Proceedings. 27th International Conference on Software Engineering, 2005. ICSE 2005. p. 88-96.

[10] Querydsl. http://www.querydsl.com/

[11] jOOQ. https://www.jooq.org/

[12] Robin Milner. « A theory of type polymorphism in programming ». Journal of Computer and System Sciences, 17 (1978), p. 348-375.

[13] Hibernate project. https://hibernate.org/

[14] Zhengqin Luo, Tamara Rezk, and Manuel Serrano. « Automated code injection prevention for web applications ». In : Theory of Security and Applications - Joint Workshop, TOSCA 2011, Saarbrücken, Germany, March 31 - April 1, 2011, Revised Selected Papers.Sous la dir. De Sebastian Mödersheim et Catuscia Palamidessi. T. 6993. Lecture Notes in Computer Science. Springer, 2011, p. 186-204. https://doi.org/10.1007/978-3-642-27375-9_11

[15] Gregory T. Buehrer, Bruce W. Weide, and Paolo A. G. Sivilotti. « Using parse tree validation to prevent sql injection attacks ». In : Proceedings of the International Workshop on Software Engineering and Middleware (SEM) at Joint FSE and ESEC. 2005, p. 106-113.

[16] Zhendong Su and Gary Wassermann. « The essence of command injection attacks in web applications ». In : Proceedings of the 33rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL 2006. Sous la dir. de J. Gregory Morrisett et Simon L. Peyton Jones. ACM, 2006. https://doi.org/10.1145/1111037.1111070



Articles qui pourraient vous intéresser...

Implémentation du calcul symbolique et de la dérivation en Java

Magazine
Marque
GNU/Linux Magazine
Numéro
243
Mois de parution
décembre 2020
Domaines
Résumé

Les logiciels de calcul symbolique sont relativement abondants. Pour les curieux ou ceux qui voudraient intégrer ce type de fonctionnalités dans leurs propres programmes, nous allons essayer de lever une partie des mystères des théories et des problèmes qui se cachent derrière la création de ces systèmes.

Déboguez vos codes PHP

Magazine
Marque
GNU/Linux Magazine
Numéro
243
Mois de parution
décembre 2020
Domaines
Résumé

La mise au point de programmes PHP est parfois perçue comme archaïque, car la configuration d’un environnement efficace de debugging peut s’avérer déroutante. Voici comment paramétrer une confortable installation pour profiter pleinement d’outils professionnels et maîtriser le développement local ou distant.