Tu utilises un navigateur obsolète. S'il te plait mets ton navigateur à jour ou active Google Chrome Frame pour améliorer ton expérience.

Parties en cours Pas de partie pour l'instant.


Futon
lvl.67476.043 xp
Rōnin
aucune course / aucun assassinat

Bonjour,

Je suis sur le point de faire un site web. Le problème est que je ne sais pas sécuriser ma BDD ni les codes que l'on peut voir en faisant F12, pouvez-vous me donner une astuce pour que tous mes codes soient in safe ?


11 commentaires

Raiton - 6° dan
lvl.10038.953.510 xp
Rōnin
50 courses / 1 605 assassinats
Grand Sage

Je rappelle que l'idée même d'une section HS/Flood, c'est justement d'accueillir tous les sujets divers et variés (mais en accord avec le règlement) ne pouvant être intégrés dans les [..]

Effectivement, mais s'il souhaitait avoir de vraies réponses il aurait eu plus de chance sur des forums destinés au développement WEB... D'ailleurs sa réponse a été apporté, je verrouille donc ^^


Katon
lvl.10017.140.443 xp
Rōnin
50 courses / 65 assassinats

Je rappelle que l'idée même d'une section HS/Flood, c'est justement d'accueillir tous les sujets divers et variés (mais en accord avec le règlement) ne pouvant être intégrés dans les autres sections. Ce topic a donc bien sa place ici et ne pose aucun problème. :p


Futon
lvl.67476.043 xp
Rōnin
aucune course / aucun assassinat
Shinzo Takezo

On a tous débuter ^^ Si tu sais te sérvir d'un serveur Linux, ça va grandement t'aider tout de même étant donné que ce genre de système sont vraiment très "libres", c'est-à-dire que tu [..]

Merci de votre aide


Raiton - 6° dan
lvl.10038.953.510 xp
Rōnin
50 courses / 1 605 assassinats
Illoxx

Je prends note, car j'apprends encore, seulement je comprenais pas trop le fonctionnement... Je pense avoir compris.

Après, comme j'ai dit je suis débutant, je prends encore note. Je [..]

On a tous débuter ^^ Si tu sais te sérvir d'un serveur Linux, ça va grandement t'aider tout de même étant donné que ce genre de système sont vraiment très "libres", c'est-à-dire que tu peux personnaliser presque tout comme bon te semble, si tu le fais bien, tu peux vraiment te démarquer des autres sites. Dans le cas contraire, tu peux vraiment perdre en rapidité, donc c'est quand-même a gérer avec précaution.

 

Tu verras, une fois que tu comprends le principe ça se fait très très facilement :)


Futon
lvl.67476.043 xp
Rōnin
aucune course / aucun assassinat
Shinzo Takezo

Salut Shagril et Illoxx,

 

Les requêtes MySQL fonctionnent encore très bien, cependant, Illoxx si tu es une personne qui veut apprendre en suivant les nouvelles méthodes, je te conseille [..]

Je prends note, car j'apprends encore, seulement je comprenais pas trop le fonctionnement... Je pense avoir compris.

Après, comme j'ai dit je suis débutant, je prends encore note. Je sais juste me servir de PHP My admin ^^

Mon rôle avant était de gérer un serveur Linux, maintenant c'est les transactions en php à MySQL, donc je suis vraiment... Débutant là-dedans...


Raiton - 6° dan
lvl.10038.953.510 xp
Rōnin
50 courses / 1 605 assassinats

Salut Shagril et Illoxx,

 

Les requêtes MySQL fonctionnent encore très bien, cependant, Illoxx si tu es une personne qui veut apprendre en suivant les nouvelles méthodes, je te conseille encore une fois de te tourner vers PDO ou encore MySQLi (MySQLi sera plus simple pour débuter étant donné qu'il se base sur MySQL et donc tu n'auras pas beaucoup de recherches à faire avant de trouver l'attribut équivalent a MySQL). Bon, après rien ne t'empêches d'utiliser MySQL, mais d'après la documentation officielle, il est tout de même plus avantageux d'utiliser une méthode nouvelle pour les sites nouveaux:

 

L'extension mysqli, ou, comme elle est parfois appelée, l'extension MySQL améliorée (i pour improved en anglais), a été développée pour tirer parti des nouvelles fonctionnalités des systèmes MySQL version 4.1.3 et plus récent. L'extension mysqli est inclue dans PHP depuis les versions 5.

L'extension mysqli a un grand nombre d'avantages et d'améliorations par rapport à l'extension mysql

Source de http://php.net//manual/fr/mysqli.overview.php

 

Par la suite, tu peux regarder sur ce lien également : http://code.tutsplus.com/tutorials/pdo-vs-mysqli-which-should-you-use--net-24059 qui démontre clairement qu'entre MySQLi et PDO il y a une marge énorme de capacités.

 

Shagril, j'aimerais seulement te parler de quelques petites choses, n'hésite pas à me reprendre si j'ai tort, c'est pour mon propre apprentissage de développeur débutant, je me base sur des sites de développeurs ou les réponses étaient déjà apportées, mais j'aimerais avoir tes avis. Tout d'abord, le SHA1 est-il totalement indéhachable ? Personnellement, j'en doute vu le nombre de site de déhachage du SHA1; cependant j'ai appris qu'il y avait une méthode qui le rendait totalement indéhachable: utiliser un $salt (sauf si la personne connait le $salt). Dans mon site, j'hache les mot de passe de mes utilisateurs en SHA1 mais je multiplie le mot de passe par mon $salt avant. Par exemple comme ceci :

 

CODE PHP
<?php require('/var/www/includes/config.php'); // informations pour la connexion à la BDD en PDO

 

$salt = 'Nln&p4/n#3b8|'; // Notre Salt

$password = sha1($password.$salt); // Defini le mot de passe
$req = $bdd->prepare('INSERT INTO users (user_password) VALUES (:user_password)');
$req->execute(array(
          'user_password' => $password
));
$req->closeCursor(); // Ferme la requête

 

?>

 

Mais toi, qu'en penses-tu ? Un $salt est-il nécessaire ? Encore une fois, moi je ne peux m'en séparer pour la fiabilité de mes utilisateurs.

 
Autre chose, j'ai vu que tu utilisais des requêtes avec des * pour sélectionné la totalité de la table. Niveau optimisation, j'ai appris que ça ralentissait les requêtes et donc moi je développe cette étoile par les informations dont j'ai besoin. Si j'ai besoin du pseudo et du mot de passe, je sélectionne user_pseudo, user_password et non pas toute la table, par exemple. Qu'en penses-tu, n'est-ce pas effectivement plus rapide niveau navigation ?

 

L'étoile est une chose bien minime mais à force peut augmenter la vitesse d'un gros script, après il y a des centaines d'astuces d'optimisation comme utiliser des ' à la place des " dans les echo ou autre, par exemple, pour la concaténation enlever les points et les remplacer par des virgules. Niveau navigation total on pourrait aussi installer un système de cache via un .htaccess qui rendrait l'affichage au second rechargement beaucoup plus rapide, un système d'archivage du type gzip des pages, modifier correctement les paramètres du php.ini, etc... Les machines Debian sont vraiment excellentes pour apprendre tout ça, on a vraiment beaucoup de liberté sur ce genre de marchine dédiées.

 

Bye bye, j'attends avec impatience tes réponses sur ce que j'ai dis :)


Katon - 1° dan
lvl.565.401.692 xp
- Shishō
40 courses / 41 assassinats

Effectivement, ce n'est pas le bon endroit mais je répondrais tout de même à ta requête.

Une base de donnée est normalement de base sécurisée si tu utilise mySQL (dans phpMyAdmin). pour plus de sécurité garde toujours ta version à jour, utilise des mots de passes long est difficile a trouver.

Niveau code web lors de chaque tes transfert de mdp pour les comptes utilisateur, utilise un cryptage sha1 il est difficilement (voir impossible) à décrypté.

exemple avec un système d'authentification :

CODE PHP
<?php
 include('modules/connexion/sql.php');
 include('logs.php');
    // connexion au serveur MYSQL
    $utilisateur=htmlentities($_POST['pseudo'], ENT_QUOTES);
    $shapass=htmlentities(SHA1($_POST['mdp']), ENT_QUOTES);

    $db_connect or logs(date("H.i.s")." Erreur de connexion au serveur : ".mysql_error()."\r\n");
    // Ouverture de la base de données Terminale
    $db_select or logs(date("H.i.s")." Erreur de connexion à la base gesparc : ".mysql_error()."\r\n");
    // Requete
    $sql="select * from Users where pseudo='".$utilisateur."' AND mdp = '".$shapass."' ";
    $requete=mysql_query($sql) or logs(date("H.i.s")." Erreur dans la requête : ".mysql_error()."\r\n");
    $serveur=mysql_fetch_array($requete);

    //Fermeture de la connexion à Mysql
    mysql_close();

    $res= mysql_num_rows($requete);
    if ($res==0)
        {
            header("Location: index.php?page=login&action=Fail!");

        }
        else
        {
            // --- enregistrement en session de l'utilisateur
            session_start();
            $_SESSION["utilisateur"] = $utilisateur;
                logs(date("H.i.s")." ".$_SESSION['utilisateur']." connected. \r\n");
            $_SESSION["level"] = $serveur['level'];
            // --- redirection en fonction de l'utilisateur
            header("Location: index.php");
        }
?>


J'explique :

j'intègre le script de connection à la base de donnée qui est sur un autre fichier php, c'est tout simple:

sql.php<?php

$db_connect=mysql_connect('localhost','USER','MDP');
$db_select=mysql_select_db('NOM_DATABASE');
$db_query=mysql_query("SET NAMES 'utf8'");

?>


Je l'ajoute dans ma page auth.php avec le include() et je crypte le mot de passe avec le SHA1() (j'utilise le htmlentities() pour éviter le vole du mots de passe pendant le transfert entre plusieurs page, mais c'est surtout utilise pour éviter toute modification de la valeur par l'utilisateur) :

auth.php
<?php
 include('modules/connexion/sql.php');
 include('logs.php');
    // connexion au serveur MYSQL
    $utilisateur=htmlentities($_POST['pseudo'], ENT_QUOTES);
    $shapass=htmlentities(SHA1($_POST['mdp']), ENT_QUOTES);
//----------------------------------------------------------------------------------------


je me connecte à la base de donnée avec le $db_connect (le logs() est une fonction que j'ai créée pour écrire dans un fichier texte toute action sur le serveur, le or qui est devant permet de l'executer seulement si une erreur SQL apparait)

je sélectionne la base de donnée avec le $db_select

et je récupère le nom d'utilisateur, où le pseudo et le mdp crypté, sont égal ç ceux de la base de donnée :

auth.php
//-----------------------------------------------------------------------------------------
    $db_connect or logs(date("H.i.s")." Erreur de connexion au serveur : ".mysql_error()."\r\n");
    // Ouverture de la base de données Terminale
    $db_select or logs(date("H.i.s")." Erreur de connexion à la base gesparc : ".mysql_error()."\r\n");
    // Requete
    $sql="select * from Users where pseudo='".$utilisateur."' AND mdp = '".$shapass."' ";
    $requete=mysql_query($sql) or logs(date("H.i.s")." Erreur dans la requête : ".mysql_error()."\r\n");
    $serveur=mysql_fetch_array($requete);
//-----------------------------------------------------------------------------------------


je ferme la connexion à la base de donnée :

auth.php
//-----------------------------------------------------------------------------------------

    //Fermeture de la connexion à Mysql
    mysql_close();

?>


j'espère t'avoir un peut éclairé. Bonne continuation.


Raiton - 6° dan
lvl.10038.953.510 xp
Rōnin
50 courses / 1 605 assassinats

Bonjour,

 

Effectivement, le forum où tu poses ta question n'est pas destiné au programmation mais au jeu Ninja Tooken. Si tu souhaites avoir des réponses claires et précises, tu peux demander de l'aide sur http://fr.openclassrooms.com anciennement le site du zéro ou encore http://www.developpez.com. Ninja Tooken possède effectivement une base de données, mais c'est pas un bon argument pour poser ta question ici x)

 

Cependant, pour répondre à ta question, l'idée serait déjà que tu protèges tout simplement le mot de passe, ne met pas un mot de passe très simple dans le style "abc1234567" par exemple. Ensuite, le top du top serait que tes requêtes ne soient pas faites grâce à l'utilisateur "root", donc faudrait créer un utilisateur secondaire ayant des permissions réduites (réduction des dégâts) (possible si tu es chez un hébergeur de serveur dédié ou d'hébergement te laissant accès aux fichiers permettant de grosses configurations) (PS: Regarde aussi si tu as accès au php.ini, il y a certaines informations à modifier; une petite recherche sur Google et tu trouveras quoi modifier).

 

Par la suite, tu dois savoir qu'il existe plusieurs moyens d'envoyer des requêtes à la BDD, anciennement mysql, présentement mysqli ou encore PDO. Je te conseille fortement PDO t'évitant déjà pas mal de faille par défaut. Ensuite, tout simplement, fait un petit tour dans les documentations PHP qui sont super bien foutues pour t'apprendre à envoyer des requêtes préparées. Techniquement, avec des requêtes préparées en PDO tu ne peux pas avoir de "faille" de ce côté. Je te conseille également si tu fais récupérer des variables depuis un formulaire ($_POST) ou une information envoyée dans l'URL ($_GET) de passer ces variables par un htmlspecialchars ou un htmlentities par précaution.

  

Bon courage !


Raiton - 8° dan
lvl.10048.885.105 xp
- Taishō
306 courses / 360 assassinats

Je suis du même avis que bibi y a des forums appropriés pour ça non ?


Futon
lvl.67476.043 xp
Rōnin
aucune course / aucun assassinat
Bibidanger

Je ne suis pas sûr que NT soit le bon endroit pour ce genre de question.
 Ici peut êrte > http://www.commentcamarche.net/

Sachant que ce site comporte une BDD, je pense que c'est le bon endroit...


Katon - 7° dan
lvl.8838.554.652 xp
- Shishō
333 courses / 999 assassinats

Je ne suis pas sûr que NT soit le bon endroit pour ce genre de question.
 Ici peut êrte > http://www.commentcamarche.net/