Vous n'êtes pas identifié(e).
Pages : 1
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 :
Pour mon formulaire contact ,
Mon code fonctionne avec PDO prepare et , PDO execute ,
Voici mon code :
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
<?php
//Connexion a la base de donnees
require 'admin/templates/connexionBase.php';
//Verifie que l'identifiant rentré dans le formulaire de connexion est dans la table t_utilisateur
if (isset($_POST['validerConnexion']) AND isset($_POST['identifiant']))
{
$sqlCon = $pdo -> prepare ( " SELECT * FROM t_utilisateurs WHERE identifiant = ?" )
or die (print_r ( $pdo -> errorInfo())) ;
$sqlCon -> execute ( array ( $_POST['identifiant'] ));
$nbCon = $sqlCon -> rowcount() ;
if ( $nbCon == 1 )
{
$resCon = $sqlCon -> fetch() ;
//Si il existe l'identifiant, compare le mot de passe
// Si le mot de passe est correct, rentre dans la variable session droit le champ 'droits' de la base de données, soit 1. 2 ou 3 ou 4
if ( $resCon['password'] == $_POST['password'] )
{
$_SESSION['droits'] = $resCon['droits'] ;
}
// Si le mot de passe est faux
else
{
$_SESSION['droits'] = 'faux' ;
$erreurCon = "Mot de passe erroné." ;
};
}
// Si l'utilisateur n'existe pas
else
{
$_SESSION['droits'] = 'faux' ;
$erreurCon = "Ce nom d'utilisateur n'existe pas." ;
};
};
Bonjour à tous,
Ceci est mon premier post sur ce forum, je viens de m'inscrire.
Je suis un débutant autodidacte en php,
Et à force de recherche et de travail (depuis environ 6 mois) j'ai pu créer un site internet relié à une base de données.
Un site à vocation commerciale. J'en suis très content.
Voici pour la présentation : )
Je protège la partie Admin de mon site grâce à un formulaire de connexion identifiant / mot de passe.
Une requête est exécutée sur le serveur de base de données : si il existe dans la table utilisateurs un enregistrement avec le même identifiant et le même mot de passe,
alors la requête sélectionne le chiffre du champ " droits " .
La table est comme cela :
id identifiant motdepasse droits
0 admin mdpadmin 1
1 max mdpmax 2
2 visiteur mdpvisiteur 3
Le chiffre " droits " est ensuite enregistré dans une variable de session. $_SESSION['droits'].
Ensuite, lors de l'arrivée sur chaque page, cette variable est controlée et charge en fonction, le template admin ou le template visiteur.
Donc, si $_SESSION['droits'] == 1 ; Cela charge le template Admin.
si $_SESSION['droits'] == 3 ; Cela charge le template Visiteur.
Ma question est la suivante : Ce mode est-il assez sécurisé ?
En particulier, serait-il possible qu'un utilisateur malveillant puisse définir $_SESSION['droits'] == 1 ?
Je vous remercie pour votre attention.
Bonne journée.
Lorenzo
Pages : 1