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 :

Fonctions de sécurité de base à appliquer aà mon site web.


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 196
    Points : 53
    Points
    53
    Par défaut Fonctions de sécurité de base à appliquer aà mon site web.
    Bonjour,
    j'aimerais savoir quelles sont les fonctions à utiliser pour sécuriser pour mon site internet et quand les utiliser.

    Je sais qu'il y a mysql_real_escape_string à utiliser lorsqu'on récupère des valeurs d'un $_POST ou d'un GET

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass']))
    {
     
    	$login = mysql_real_escape_string($_POST['login']);
    	$pass = mysql_real_escape_string($_POST['pass']);
    OU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     if(isset($_GET['limite'])) 
     
            $limite=mysql_real_escape_string($_GET['limite']);
        else   $limite=0;
    htmlentities lorsqu'on affiche une variable avec un echo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h4><p>Nous avons trouvé <?php echo htmlentities($nb_resultats); // on affiche le nombre de résultats

    Ais-je raison ?

    Ici est-ce sécurisé ?*

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    require ('debutpublic.php');
    if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass']))
    {
     
    	$login = mysql_real_escape_string($_POST['login']);
    	$pass = mysql_real_escape_string($_POST['pass']);
    	$pass=sha1($pass);
     
     
    	$sql = " SELECT id FROM users WHERE login='$login' and pass='$pass'";
    	$req = mysql_query($sql) or die(mysql_error());
     
    		if(mysql_num_rows($req)>0)
    		{	
    			$data= mysql_fetch_assoc($req);
    			$_SESSION['Auth'] = array(
    										'login' => $login,
    										'pass' => $pass
    									 );
     
     
    				header('Location:admin/gestionnews.php');
     
    		}
    		else
    		{	
    			echo '<body onLoad="alert(\'Membre non reconnu...\')">'; 
    		}
     
    }
    Et comment bien sécuriser ici ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while($data=mysql_fetch_assoc($req))
    {
        $id=mysql_real_escape_string($data["id"]);
        $filename=mysql_real_escape_string($dossier.$data['image']);
        echo '<img src="'.$filename.'" alt="" />';
        echo "<p> {$data["titre"]} -- ";
    	echo "<p>".Tronquer_Texte($data["contenu"],  150)."<br><a href='detail_news.php?id={$data["id"]}'>Suite de  l'article</a></p>";
        echo "<p align=\"right\">".date("j/n/Y G:i",strtotime($data["date"]))."</p>";
        echo "<p><a href=\"formcom.php?id={$data["id"]}\">  Cliquez ici pour ajouter un commentaire </a></p>";
        echo" Commentaire(s) ({$data["nb_comments"]})";
    	echo "<br><br><br><br>";	 	
    }
    Que faut-il faire d'autres ?

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton deuxième code ne va pas.
    Tu appliques mysq_real_escape_string() mais ensuite tu utilises la variable d'origine.
    De plus comme tu l'as pourtant dit toi même, c'est htmlentities qui est concerné lorsqu'on affiche des variables.

    intval() peut remplacer mysq_real_escape_string() et htmlentities() quand tu traites des entiers.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 196
    Points : 53
    Points
    53
    Par défaut
    Ton deuxième code ne va pas.
    Tu appliques mysq_real_escape_string() mais ensuite tu utilises la variable d'origine.
    De plus comme tu l'as pourtant dit toi même, c'est htmlentities qui est concerné lorsqu'on affiche des variables.

    intval() peut remplacer mysq_real_escape_string() et htmlentities() quand tu traites des entiers.
    Mon deuxième code ? De quel code parles-tu ? De celui-là?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(isset($_GET['limite'])) 
     
            $limite=mysql_real_escape_string($_GET['limite']);
        else   $limite=0;
    intval() remplace à la fois mysq_real_escape_string() et htmlentities() pour les entiers c'est ça ?
    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     $id=intval($data["id"]);
     
        echo $id;
    cela suffit ?
    Pourrais-tu me dire si :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    require ('debutpublic.php');
    if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass']))
    {
     
    	$login = mysql_real_escape_string($_POST['login']);
    	$pass = mysql_real_escape_string($_POST['pass']);
    	$pass=sha1($pass);
     
     
    	$sql = " SELECT id FROM users WHERE login='$login' and pass='$pass'";
    	$req = mysql_query($sql) or die(mysql_error());
     
    		if(mysql_num_rows($req)>0)
    		{	
    			$data= mysql_fetch_assoc($req);
    			$_SESSION['Auth'] = array(
    										'login' => $login,
    										'pass' => $pass
    									 );
     
     
    				header('Location:admin/gestionnews.php');
     
    		}
    		else
    		{	
    			echo '<body onLoad="alert(\'Membre non reconnu...\')">'; 
    		}
     
    }
    est sécurisé et me sécuriser cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while($data=mysql_fetch_assoc($req))
    {
        $id=mysql_real_escape_string($data["id"]);
        $filename=mysql_real_escape_string($dossier.$data['image']);
        echo '<img src="'.$filename.'" alt="" />';
        echo "<p> {$data["titre"]} -- ";
    	echo "<p>".Tronquer_Texte($data["contenu"],  150)."<br><a href='detail_news.php?id={$data["id"]}'>Suite de  l'article</a></p>";
        echo "<p align=\"right\">".date("j/n/Y G:i",strtotime($data["date"]))."</p>";
        echo "<p><a href=\"formcom.php?id={$data["id"]}\">  Cliquez ici pour ajouter un commentaire </a></p>";
        echo" Commentaire(s) ({$data["nb_comments"]})";
    	echo "<br><br><br><br>";	 	
    }
    ça me donnera une bonne idée de comment on fait.

    Merci d'avance !

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Mon deuxième code ? De quel code parles-tu ?
    Tu as mis deux codes dans ton message.

    est sécurisé et me sécuriser cela :
    Je t'ai dit ce qui n'allait pas, c'est a toi de travailler maintenant.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 196
    Points : 53
    Points
    53
    Par défaut
    Voilà j'ai bossé de mon côté.

    Pour la récupération de l'image avant l'ajout j'ai sécurisé comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $dossierdest='images/';
    $name = mysql_real_escape_string($_FILES["image"]["name"]);
    $tempname=mysql_real_escape_string($_FILES["image"]["tmp_name"]);
    //nom du fichier avec l'extension
    $fichier = basename(mysql_real_escape_string($_FILES['image']['name']));
    $taille_maxi = 100000;
    $taille = filesize(mysql_real_escape_string($_FILES['image']['tmp_name']));
    $extensions = array('.png', '.gif', '.jpg', '.jpeg');
    $extensionfichier = strrchr($_FILES['image']['name'], '.');
    Est-ce comme cela qu'il faut faire ?

    Pour la partie affichage de news j'ai fais comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while($data=mysql_fetch_assoc($req))
    {
     
        $filename=$dossier.$data['image'];
    	echo '<a style="cursor:pointer;text-decoration:underline" onclick= "checkDel(\'supprnews.php?id='.intval($data['id']).'\')">[ X ]</a>';
        echo '<img src="'.$filename.'" alt="" />';
        echo "<p> ".htmlentities(($data["titre"])." -- ";
    	echo "<p>".Tronquer_Texte(htmlentities(($data['contenu']),  150)."<br><a href='detail_news_admin.php?id=".intval($data["id"]).">Suite de  l'article</a></p>";
        echo "<p align=\"right\">".date("j/n/Y G:i",strtotime(htmlentities(($data["date"])))."</p>";
        echo" Commentaire(s) (".intval($data["nb_comments"]).")";
    	echo " <a href=\"edit.php?id='".intval($data["id"])."'\">edit</a><br><br><br><br>";
     
    }
    Est-ce bon ?

    Merci d'avance !

    EDIT : Maintenant que j'ai mis en place cela j'ai mes news qui s'affiche avec des caractères tel : é pour les é .
    Mes pages sont encodées en UTF8 sans bom.

    Que faire ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    $_FILES["image"]["tmp_name"] n'a pas besoin d'être taoré puisqu'il vient de PHP.
    Pour $_FILES["image"]["name"] il faut nettoyer le nom du fichier pour être sur qu'il ne soit pas trafiqué avec des .. et des / par exemple.

    Il y a des problèmes dans la logique de ce que tu fais : n'applique pas deux fois la meme focntion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $name = fonction($_FILES["image"]["name"]);
    $fichier = basename(fonction($_FILES['image']['name']));
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $name = fonction($_FILES["image"]["name"]);
    $fichier = basename($name);

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 196
    Points : 53
    Points
    53
    Par défaut
    Ok ok je prends tes remarques en compte mais d'où vient ce problème de caractères ?

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Quel encodage indique le navigateur quand il affiche la page ?
    Indiques-tu un encodage dans ta page HTML ?
    Quel est l'encodage du fichier .php ?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 196
    Points : 53
    Points
    53
    Par défaut
    Voilà ce qu'il y a en haut de mes pages :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    <title>Paris Saint Germain</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <link rel="stylesheet" type="text/css" href="admin/feuillestyle.css" /> 
    </head>
    Après, je n'ai pas de pages html que des php et elles sont encodées en utf8 sans bom (d'après notepad ++ encodage --> utf8 sans bom)

    Mon navigateur détecte comme encodage utf8 si je me fie à firefox (clic droit --> informations sur la page)

    J'avais déjà eu à une époque des problèmes de ce genre quand j'affichais des news à partir de ma base de données que j'avais réussis à résoudre difficilement. Notamment en passant en utf8 sans bom si je me souviens bien...

Discussions similaires

  1. [ODBC] Fonctions de sécurité de base à appliquer à mon site web.
    Par polux31 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/05/2011, 13h22
  2. Sécurité de mon site web
    Par Destiny dans le forum Sécurité
    Réponses: 4
    Dernier message: 26/08/2007, 21h36
  3. Sécurité lors de l'inscription à mon site
    Par ned-flanders dans le forum Sécurité
    Réponses: 1
    Dernier message: 25/03/2007, 19h55
  4. Les images ne s'affichent pas et le css n'est pas appliqué sur mon site en ligne
    Par landar dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 19/03/2007, 19h47
  5. Mettre en ligne la base MySql de mon site
    Par tiboleo dans le forum Outils
    Réponses: 3
    Dernier message: 20/11/2006, 10h46

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