diff --git a/content/slides/1337/images/sidoine/SQLi-2-https.png b/content/slides/1337/images/sidoine/SQLi-2-https.png index aff8f213cde749f2612cee1869b544ed597d710f..11e88108bad4c2108a1e83d7810684eb32bda0e0 100644 Binary files a/content/slides/1337/images/sidoine/SQLi-2-https.png and b/content/slides/1337/images/sidoine/SQLi-2-https.png differ diff --git a/content/slides/1337/md/sidoine.md b/content/slides/1337/md/sidoine.md index 1c3d7ac100fc23e19015150bafb0b759b3752343..111e024da93f31aea228b19ce765639ff8148605 100644 --- a/content/slides/1337/md/sidoine.md +++ b/content/slides/1337/md/sidoine.md @@ -253,7 +253,7 @@ Note: * ???? -## Bonnes pratiques +## <i class="fa fa-medkit"></i> Bonnes pratiques * stocker les mots de passe hashés<!-- .element class="fragment roll-in" --> @@ -267,12 +267,43 @@ Note: * SHA256(admin+selsupercompliqué)<!-- .element class="fragment roll-in" --> +## <i class="fa fa-medkit"></i> Bonnes pratiques + +* filtrer par TOUTES les entrées par listes blanches + * caster + * [intval()](http://php.net/manual/fr/function.intval.php), [floatval()](http://php.net/manual/fr/function.floatval.php), ... + * si l'id est toujours un entier ... + * échappement des paramètres de requêtes + * [stripslashes()](http://php.net/manual/fr/function.stripslashes.php), [mysql_real_escape_string()](http://php.net/manual/fr/function.mysql-real-escape-string.php) + + +## <i class="fa fa-medkit"></i> Bonnes pratiques + +* [Ne plus utiliser les fonctions mysql_ leur préférer mysqli_](http://stackoverflow.com/questions/548986/mysql-vs-mysqli-in-php) +* Utiliser des requêtes préparées + * PDO, ORM : Doctrine2, Propel +* Être le plus silencieux possibles quant aux requêtes invalides + * [@](http://php.net/manual/fr/language.operators.errorcontrol.php) mais pas [or die()](http://php.net/manual/fr/function.die.php) + * [error_reporting](http://php.net/manual/fr/function.error-reporting.php), pas [mysql_error()](http://php.net/mysql_error) ni [mysqli_error()](http://php.net/manual/fr/mysqli.error.php) +* repérer les requêtes suspectes dans les logs + + +## <i class="fa fa-medkit"></i> Bonnes pratiques + +* Web Application Firewall (WAF) + * [mod_security](https://www.modsecurity.org/) + * log le POST + * <i class="fa fa-fire"></i> [SQL Injection: Les techniques d’évasion de filtres](http://www.mcherifi.org/hacking/sql-injection-les-techniques-devasion-de-filtres.html) +* Les privilèges de l'utilisateur SQL ont un sens + * [FILE](https://dev.mysql.com/doc/refman/5.1/en/privileges-provided.html#priv_file) + * attention aux permissions sur la base de données + * information_schema ... +* Changer les préfixes de table des CMS quand c'est possible + + ## SQLi de la vraie vie (2014) * les SQLi n'apparaissent pas (plus) de manière aussi grossière - * utilisation notamment des requêtes préparées - * échappent les paramètres - * par défaut dans toute ORM (qui se respecte) * Voici une vraie faille du CMS drupal ... @@ -521,7 +552,7 @@ $ whoami <!-- .element width="100%"--> -## Moralité +## <i class="fa fa-medkit"></i> Bonnes pratiques * un malheur n'arrive jamais seul * [c.f. loi de murphy](https://fr.wiktionary.org/wiki/loi_de_Murphy)