Aller au contenu

PHP : connexion BDD sécurisée et optimisée


Sujets conseillés

Posté

Bonjour,

Je debute dans la programmation PHP et je voudrais savoir quelle est la meilleure facon de gérer la connexion à ma base de données. Sur un site j'ai vu qu'on proposé un mecanisme pas trop mal : voir ici. Est ce que ca vous parait bien ? Des questions qu'en même sur le sujet :

- où mettre le fichier "fonctions.connect.php" contenant les infos de connexion et surtout comment le proteger ?

- à chaque page PHP appelée par l'utilisateur, on se connecte à la BDD en début de page et on se déconnecte en fin de page. Il n'y a pas moyen de se connecter à la BDD lorsque l'utilisateur en a besoin la première fois et ensuite conserver sa connexion tant qu'il se balade sur le site ? Cela evitera les connexions/deconnexions BDD (à moins que cela ne soit pas genant).

Merci par avance

Posté

Le code que tu as vu dans le lien que tu indiques permet de faire une bonne connexion, bien propre. Absolument pas de la sécuriser.

Il faut bien voir que le php est interprété et que tes codes ne seront a priori jamais lisibles par un utilisateur extérieur.

Ceci étant, des petits malins pourraient éventuellement réussir à lire tes fichiers s'ils parvenaient à les télécharger.

Je conseille donc de mettre les codes de connexion dans un fichier config.php que tu mets dans un dossier conf/. Tu fais un include de ces codes au moment de la connexion (au passage une fois que la connexion à la base est ouverte, tant que tu ne la refermes pas elle reste ouverte, donc pas besoin de l'ouvrir à chaque page) et surtout tu mets un fichier htaccess "deny from all" dans ton dossier conf. Dès lors, ton fichier de configuration est plutôt bien protégé (id est : un pirate ira plutôt voir le site du voisin, sauf s'il t'en veut beaucoup )

Posté
(au passage une fois que la connexion à la base est ouverte, tant que tu ne la refermes pas elle reste ouverte, donc pas besoin de l'ouvrir à chaque page)

Si tu utilises une connexion normale (à savoir non persistante), la connexion se ferme à la fin de chaque script (donc à la fin de chaque page).

Posté

Merci pour vos reponses.

ricotrutt, est ce que tu aurais un exemple de fichier htaccess complet avec "deny from all" ? Cela signifie qu'on ne peut pas acceder au repertoire "conf" via une URL (http://www.monsite.com/conf/htaceess) mais un script peut lui l'appeler via un include ?

petit-ourson, si la connexion est fermée en fin de script/page, comment faut il faire pour la conserver ? Peut être cela n'est il pas judicieux/utile de conserver une connexion et qu'il vaut mieux en refaire une nouvelle à chaque page ?

Posté

Voilà des infos sur le htaccess : http://www.siteduzero.com/tuto-3-152-1-pro...n-htaccess.html

A la différence de ce qui est indiqué dans cet exemple, tu mets simplement dans ton fichier .htaccess le code suivant :

deny from all

Et oui ton include pourra y accéder lui.

@ petit-ourson : est ce que tu sais comment tu crées une connexion persistante exactement ? Parce que j'ai l'impression que c'est au niveau de la config d'apache que ça se passe, non ?

_AT_squillard : une connexion par page, ça n'est pas trop ne t'inquiète pas. On a l'habitude de dire qu'il faut limiter le nombre de connexions à la bdd, mais c'est parce que les mauvais développeurs en ouvrent sans les fermer, et en ouvrent à chaque requète SQL, donc 20-100 fois par page ! (par contre n'en fait pas une à chaque fichier que tu inclues).

Posté
@ petit-ourson : est ce que tu sais comment tu crées une connexion persistante exactement ? Parce que j'ai l'impression que c'est au niveau de la config d'apache que ça se passe, non ?

Au niveau d'apache, je n'en ai aucune idée. En php c'est en utilisant : mysql_pconnect().

Ces connexions n'existent plus avec le module mysqli.

Est-tu sûr que tu utilises une connexion persistante ? Ce n'est pas plutôt une connexion automatique ??

 La connexion MySQL. S'il n'est pas spécifié, la dernière connexion ouverte avec la fonction mysql_connect() sera utilisée. Si une telle connexion n'est pas trouvée, la fonction tentera d'ouvrir une connexion, comme si la fonction mysql_connect() avait été appelée sans argument. Si aucune connexion n'est trouvée ou établie, une alerte E_WARNING est générée.

une connexion par page, ça n'est pas trop ne t'inquiète pas. On a l'habitude de dire qu'il faut limiter le nombre de connexions à la bdd, mais c'est parce que les mauvais développeurs en ouvrent sans les fermer, et en ouvrent à chaque requète SQL, donc 20-100 fois par page ! (par contre n'en fait pas une à chaque fichier que tu inclues).

Ce n'est pas vraiment exacte. Si je lis la documentation :

Si un deuxième appel est fait à mysql_connect()  avec les mêmes arguments, aucune nouvelle connexion ne sera établie, mais plutôt, l'identifiant de la connexion de la connexion déjà ouverte sera retourné. Le paramètre new_link modifie ce comportement et permet à mysql_connect() de toujours ouvrir une nouvelle connexion, même si mysql_connect() a été appelée avant avec les mêmes paramètres. En safe mode SQL, ce paramètre est ignoré.

Il faut peut être plutôt limité le nombre de requpetes (surtout si elles sont lourdes) et priviligier la fermeture des connexions (quand c'est possible) avant l'envoi de contenu au client.

Posté

Je pense effectivement que j'utilise les connexions automatiques puisque de toute façon j'ai activé mysqlli

Pour ton deuxième point, c'est hyper intéressant je ne le savais pas ! Bien entendu fermer les connexions avant l'envoi du contenu est plus safe, même si lorsque la connexion est ouverte uniquement sur une page, étant donné qu'elle est interprétée, le risque est limité tu ne penses pas ?

Posté

Salut,

Tu as quelques façons de faire:

- Soit tu ouvres et fermes à chaque transaction

- Soit tu laisses ouvert et risque important d'injection sql !!

- Soit comme on te l'a conseillé plus haut

- Pour ma part, je procède cette façon:

ATTENTION, je ne dis pas que c'est la meilleure mais à mon goût, c'est la plus sécurisée et professionnelle mais demande plus de connaissances en la matière (prog orientée professionnelle)

Je code perso en MVC - POJO: c'est à dire Modèle Vue Controleur--> je sépare mes composants métiers, composants accés base SQL et composant présentation XHTML, CSS et POJO pour --> Programmation Orientée Objet (PHP5).

Tu crées une class abstract pour sécurisé ton pool de connexion puis une class fille pour utiliser tes méthodes de connexion et là, pour l'instanciation de ton objet, aucun risque. Trés bonne sécurité de connexion.

Je sais que tu débutes en PHP mais tu demandes un avis alors je te le donne et peut-être que cela te donnera envie d'en savoir un peu plus, sur ce genre prog. Trés enrichissant et pleine évolution. Tu pourrais acquérir de trés bonnes bases plutôt que de "coder à l'arrache" !!!

Bonne continuation

Posté (modifié)

Bonsoir Licorne,

Ta proposition m'interesse bien. Je debute en PHP mais pas en programmation donc si tu es d'accord pour me livrer tes secrets, je suis preneur de tes classes et eventuellement d'une petit exemple d'implementation. :rolleyes:

Modifié par sguillard

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...