PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 27-06-2018 15:41:04

LorenSnow
Membre
Inscription : 14-12-2017
Messages : 3

Victime d'une tentative de hack : "injection SQL"

Bonjour à tous,

J'ai créé mon site internet suite à une formation en autodidacte au html, css, php et MySQL.
Il est constitué d'une base de données avec plusieurs tables (utilisateurs et stock).

Je m'aperçois qu'il y a deux jours, un utilisateur a tenté de rentrer dans ma base de données par injection SQL, via le biais du formulaire de contact et du formulaire de création de compte. L'attaque a duré environ 2 minutes, et l'utilisateur a posté durant ce laps de temps environ 350 messages et 350 comptes de créés. J'ai l'impression que l'attaque n'a pas abouti et que ses tentatives ont échouées grâce à mes protections.


Ma question se divise en deux :
- Reconnaissez vous ce type d'attaque ? Comment pouvons nous savoir si l'utilisateur a pu rentrer dans la base de données et la fouiller ? Ou alors si il n'a pas réussi ?

- Mes défenses sont-elles bonnes ?


Voici 4 messages postés lors de l'attaque, par le formulaire contact.

mail          : sample@email.tst
nom          : bbgjccst
prénom     : -1 OR 3+319-319-1=0+0+0+1 --
message   : 20
idstock      : 0
(idstock est l'objet à partir duquel on pose la question, 0 signifie aucun objet sélectionné)

---

mail          : sample@email.tst
nom          : kyvclywx
prénom     : kyvclywx
message   : 20
idstock      : 10622
(Formulaire contact appelé de la page de l'objet 10622)

---

mail          : sample@email.tst
nom          : toyWtwIv'));select pg_sleep(10); --
prénom     : bbgjccst
message   : 20
idstock      : -1
(-1 impossible, l'adresse URL a été modifiée, car le numéro objet passe par l'URL)

---

mail          : sample@email.tst
nom          : azz0pgqH')); waitfor delay '0:0:15' --
prénom     : bbgjccst
message   : 20



- Dans le champ mail, il n'y a eu que " sample@email.tst "

- dans le champ nom et prénom il y a eu :
bbgjccst
mphYwrOB';select pg_sleep(5); --
azz0pgqH')); waitfor delay '0:0:15' --
hZksAILq'); waitfor delay '0:0:10' --
-1' OR 2+693-693-1=0+0+0+1 --
-1" OR 2+699-699-1=0+0+0+1 --
if(now()=sysdate(),sleep(12),0)/*'XOR(if(now()=sysdate(),sleep(12),0))OR'"XOR(if(now()=sysdate(),sleep(12),0))OR"*/ 

et aussi : 1 , ou -1 , ou 1'" , ou / etc...

et dans message, pareil, mais surtout : ' 20 '







Concernant mes défenses.



Lors de la conception, j'ai tenté comme j'ai pu de me prévenir des attaques venant de l'utilisateur, comme l'injection SQL. Avec les fonctions "addslashes" et "PDO:prepare, execute".

Dans mon formulaire création de compte, voici une partie de  mon code, qui récupère les valeurs rentrées dans le formulaire, et les passe par la fonction addslashes avant de les utiliser dans la requête INSERT INTO :

                     

  $nom = addslashes($_POST['fEnrNom']) ;
      $prenom = addslashes($_POST['fEnrPrenom']) ;
      $mail = addslashes($_POST['fEnrMail']) ;
      $mdp = addslashes($_POST['fEnrMdp']) ;
      $tel = addslashes($_POST['fEnrTel']) ;
      $adresse = addslashes($_POST['fEnrAdresse']) ;
         
      $sqlEnr = "INSERT INTO t_utilisateurs (
      mail, password,
      nom, prenom,
      tel, adresse)
     
      VALUES (
      '".$mail."','".$mdp."',
      '".$nom."','".$prenom."',
      '".$tel."','".$adresse."')" ;
     
      $reqEnr = $pdo -> query($sqlEnr)
      or die (print_r ( $pdo -> errorInfo())) ;  



Pour mon formulaire contact ,

Mon code fonctionne avec PDO prepare et , PDO execute ,
Voici mon code :


if(strlen($_POST['FcontactPrenom']) < 40 AND strlen($_POST['FcontactNom']) < 40
  AND strlen($_POST['FcontactMail']) < 40 AND strlen($_POST['FcontactMessage']) < 1500)
  {
          $sqlMes = $pdo -> prepare ( " INSERT INTO t_messages (nom , prenom , mail , message , idOeuvre ) VALUES ( ? , ? , ? , ? , ? )" )
    or die (print_r ( $pdo -> errorInfo())) ;
   
    $sqlMes -> execute (array ($_POST['FcontactNom'],$_POST['FcontactPrenom'],$_POST['FcontactMail'],$_POST['FcontactMessage'],$_POST['FcontactId']));



Je rappelle mes questions
:
- Reconnaissez vous ce type d'attaque ? Comment pouvons nous savoir si l'utilisateur a pu rentrer dans la base de données et la fouiller ? Ou alors si il n'a pas réussi ?

- Mes défenses sont-elles bonnes ?




Je vous remercie pour votre attention, et je vous souhaite une très bonne journée et fin de semaine.


Lorenzo


Hors ligne

Pied de page des forums