IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Problème de sécurité suite à un plantage OVH


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 108
    Points : 56
    Points
    56
    Par défaut Problème de sécurité suite à un plantage OVH
    Bonjour à tous,
    Je vous contact aujourd'hui, car j'ai un gros problème de sécurité ...
    Aujourd'hui même, le serveur OVH hébergent la plupart des sites web de mon entreprise a planté, ou du moins quelque chose produit une erreur, nous empêchant toute connexion à toutes les bases de données.
    Un gros problème:
    Le message d'erreur affiché, précise mon identifiant et mon MDP pour la connexion à la bdd ovh.
    Le voici:
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[00000] [1040] Too many connections' in /homez.xxx/xxx/xxx/xxx/classes/PdoConnect.php:16 Stack trace: #0 /homez.xxx/xxx/xxx/xxx/classes/PdoConnect.php(16): PDO->__construct('mysql:host=10.0.xxx', 'LOGIN', 'MDP') #1 /homez.xxx/xxx/xxx/xxx/templates/menu.php(27): PdoConnect->__construct() #2 /homez.xxx/xxx/xxx/xxx/index.php(153): require_once('/homez.xxx/agen...') #3 {main} thrown in /homez.xxx/xxx/xxx/xxx/classes/PdoConnect.php on line 16
    Et voici en dessous mon fichier pdoConnect.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
     
    abstract class PdoConnect {
     
    	const DRIVER = 'mysql';
    	const HOST = 'xxx';
    	const PORT = '';
    	const DATABASE_NAME = 'xxx';
    	const USER = 'xxx';
    	const PASSWORD = 'xxx';
    	protected $pdo;
     
    	public function __construct() {
     
    		$dsn = self::DRIVER.':host='.self::HOST.';dbname='.self::DATABASE_NAME;
    		$this->pdo = new PDO($dsn, self::USER, self::PASSWORD);
    	}
     
    }
     
    ?>

    Existe-t'il un moyen de changer le message d'erreur ? D'éviter cette erreur, ou autre ?
    Je vous remercie d'avance pour votre aide .

  2. #2
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    L'erreur que tu as est plutôt claire :
    Too many connections
    Je présume que dans ton code, tu dois avoir plusieurs fois des $db = new PdoConnect; ? Si c'est le cas, comme ceci instancie une nouvelle instance de PDO à chaque fois, ça va aussi lancer une connexion à la base...

    Si c'est le cas, plusieurs solutions :
    - Implémenter le design pattern singleton
    - Être sûr d'instancier qu'une seule fois PdoConnect au début de ton code et d'utiliser cette instance partout.

    Même si la 1ère est magique, je préfère, de loin, la 2e.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 108
    Points : 56
    Points
    56
    Par défaut
    Merci pour ta réponse .
    Mais je pense que PDO n'est appelé qu'une seule fois, si je ne me trompe pas.(D'ailleurs, l'exemple que je vous ai montré est le seul qui marche avec PDO, alors que tous les autres sites plantent).

    Ci-dessous un exemple de classe où je fais appel à PDOConnect.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
        require_once 'PdoConnect.php';
     
        class MaClass extends PdoConnect {
     
     
            public function getTable() {
     
                $query = $this->pdo->prepare("SELECT *
                                             FROM xxx
                                             ORDER BY timestamp DESC");
     
                $query->execute(); /* Suite du code */

    OVH s'est occupé de la remise en route, et tout remarche très bien, mais voilà, dans le cas d'un éventuel autre problème de ce genre, je préfère éviter que les identifiants de connexion à la BDD soient visible par tous :/.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    L'erreur étant Uncaught exception 'PDOException', tu dois pouvoir intercepter l'exception et relancer une autre exception avec un message un peu plus neutre.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public function __construct() {
    	$dsn = self::DRIVER.':host='.self::HOST.';dbname='.self::DATABASE_NAME;
    	try {
    		$this->pdo = new PDO($dsn, self::USER, self::PASSWORD);
    	} catch (PDOException $e) {
    		throw new Exception('Connexion a la base de donnee impossible');
    	}
    }

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 108
    Points : 56
    Points
    56
    Par défaut
    AH ! Je me disais bien que le try catch me serait utile un jour ^^.

    Alors, étant donné que OVH a fait remarcher les services, j'ai simplement fourni de faux identifiants pour faire un test, et cela marche parfaitement ! =)

    Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de sécurité avec MS Access
    Par jpduches dans le forum Sécurité
    Réponses: 2
    Dernier message: 13/12/2010, 15h44
  2. Problème suite à un plantage système
    Par Drackster dans le forum VB.NET
    Réponses: 1
    Dernier message: 27/01/2010, 21h28
  3. Réponses: 0
    Dernier message: 22/08/2009, 02h26
  4. Problèmes de sécurité Acces-ADO
    Par digital prophecy dans le forum Bases de données
    Réponses: 1
    Dernier message: 08/03/2005, 21h08
  5. [Debutant] Problème de sécurité dans un applet
    Par peaceinpal dans le forum Applets
    Réponses: 3
    Dernier message: 09/09/2004, 20h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo