Tester des injections mysql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Tester des injections mysql

Re: Tester des injections mysql

par Genova » 28 janv. 2015, 15:49

Malheureusement de très nombreux articles périmés traînent encore sur internet, le monde du développement web évoluant à une vitesse folle. Dans l'absolu cette méthodologie n'est pas mauvaise, elle est simplement dépassée. PDO est la seule chose à utiliser aujourd'hui.

Re: Tester des injections mysql

par sam01 » 28 janv. 2015, 15:16

Merci Genova pour ton exemple, je vais m'en inspirer.

J'étais persuadé d'être protégé des injections mysql lorsque j'ai codé mes requêtes car je me suis inspiré de ce code :
mais je me rends compte avec vos remarques qu'il ne protège pas du tout des injections et j'en ai fait les frais...

Je vais donc me mettre à PDO.

Merci encore pour votre aide.

Re: Tester des injections mysql

par Genova » 27 janv. 2015, 15:58

Ca fait déjà des années qu'il ne faut plus utiliser mysql_query() mais PDO et les requêtes préparées. Pour rappel, PDO a été ajouté avec PHP 5 en 2004 ... c'est à dire il y a 11 ans !

Voici comment faire une requête totalement protégée des injections SQL avec PDO :
$pdo = new PDO('mysql:dbname=NOM_DE_LA_DB;host=localhost', 'username', 'password');
$pdo->prepare('delete from flatforswap_adherent where id_adh = :id');
$pdo->execute(array(
   'id' => $_GET['id'],
));
En ce qui concerne les magic quotes, ils ont été supprimé avec PHP 5.4, donc tu n'as plus besoin d'appliquer stripslashes() à tes variables.

Re: Tester des injections mysql

par @rthur » 27 janv. 2015, 15:34

Que veux-tu que je te dise...
Moi je veux bien te répéter la même chose plusieurs fois et dans différents sujets mais à un moment, il faut que tu fasses un effort.

Pour sécuriser ses variables, il faut :
1) les filtrer pour être sûr qu'elles soit dans le format attendu.
Et PHP a une fonction dédiée à ça qui s'appelle filter_var() (et que tu n'utilises pas dans ton code)

2) les protéger quand tu les utilises dans une requête SQL. Et ça il faut le faire pour toutes les variabes que tu passes dans une requête (pas de if is_int ou je ne sais quoi).
Et là PHP a plusieurs solutions suivant la façon dont tu te connectes à MySQL :
- mysql_real_escape_string()
- mysqli_real_escape_string()
- PDO - prepare()


Dégage ta fonction quote_smart() et refait ton code proprement sur la base des 2 bonnes pratiques que je t'ai indiqué.
C'est la 3ème fois que je te le dis dans ce sujet et 2 fois dans ton sujet précédent, après j'abandonne :)
A toi de bosser.

Re: Tester des injections mysql

par sam01 » 27 janv. 2015, 14:44

Bonjour,

mais ceci est bien fait dans la fonction suivante :

/ Protège la variable avant l'insertion

function quote_smart($value)
{
// Stripslashes si nécessaire
        if (get_magic_quotes_gpc())
        {
                $value = stripslashes_deep($value);
        }

// Protection si ce n'est pas un entier
        if (!is_int($value))
        {
                $value = "'" . mysql_real_escape_string($value) . "'";
        }
return $value;
}

Re: Tester des injections mysql

par @rthur » 27 janv. 2015, 12:28

voici un exemple de mon code, penses-tu qu'il est protégé des injection mysql ?
En terme de sécurité, il vaut mieux tout de suite partir sur des bases saines, surtout vu les problèmes que tu rencontres.

filter_var() et mysql_real_escape_string() sur tous les champs sans exception, c'est simple, propre et ça évite les attaques.

Re: Tester des injections mysql

par sam01 » 27 janv. 2015, 11:44

Bonjour,

voici un exemple de mon code, penses-tu qu'il est protégé des injection mysql ?

// Protège la variable avant l'insertion

function quote_smart($value)
{
// Stripslashes si nécessaire
	if (get_magic_quotes_gpc())
	{
		$value = stripslashes_deep($value);
	}

// Protection si ce n'est pas un entier
	if (!is_int($value))
	{
		$value = "'" . mysql_real_escape_string($value) . "'";
	}
return $value;
}

$sqly = sprintf("delete from flatforswap_adherent where id_adh=%s", quote_smart($_GET['id']));
$reqy = mysql_query($sqly) or die('Erreur SQL : <br />'.$sqly);

$sql_des = sprintf("delete from flatforswap_destination where id_adh=%s", quote_smart($_GET['id']));
$req_des = mysql_query($sql_des) or die('Erreur SQL : <br />'.$sql_des);

$sql_log = sprintf("delete from flatforswap_logement where id_adh=%s", quote_smart($_GET['id']));
$req_log = mysql_query($sql_log) or die('Erreur SQL : <br />'.$sql_log);

Re: Tester des injections mysql

par @rthur » 26 janv. 2015, 22:46

Il existe des outils pour tester les injections SQL sur son site.
Les 2 plus connus sont :
- The Mole http://sourceforge.net/projects/themole/
- Pangolin : http://nosec.org/en/productservice/pangolin/

Si tu veux te protéger contre les injections SQL :
- Vérifie que toutes les variables $_POST, $_GET, $_SESSION, $_COOKIE sont bien filtrées avec var_filter()
- Dans toutes tes requêtes SQL, aucune variable ne doit être insérée sans être passée par mysql_real_escape_string() ou si tu utilises mysqli mysqli_real_escape_string()

Tester des injections mysql

par sam01 » 26 janv. 2015, 22:38

Bonjour à tous,

est-il possible de tester des injections mysql ? Je suis victime d'une deuxième attaque de hacker.
Des tables de ma base de données ont été vidée et j'aimerais connaître la faille de mon site car j'ai pas mal de formulaire.

Merci d'avance pour votre aide.