Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/05/2011, 17h15   #1
Nouveau Membre du Club
 
Inscription : juillet 2010
Messages : 196
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 196
Points : 25
Points : 25
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 :
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 :
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 :
<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 :
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 :
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 !
polux31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 18h40   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
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.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 21h05   #3
Nouveau Membre du Club
 
Inscription : juillet 2010
Messages : 196
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 196
Points : 25
Points : 25
Citation:
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 :
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 :
1
2
3
 $id=intval($data["id"]);
 
    echo $id;
cela suffit ?
Pourrais-tu me dire si :

Code :
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 :
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 !
polux31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 21h23   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Citation:
Mon deuxième code ? De quel code parles-tu ?
Tu as mis deux codes dans ton message.

Citation:
est sécurisé et me sécuriser cela :
Je t'ai dit ce qui n'allait pas, c'est a toi de travailler maintenant.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 12h05   #5
Nouveau Membre du Club
 
Inscription : juillet 2010
Messages : 196
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 196
Points : 25
Points : 25
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 :
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 :
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 ?
polux31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2011, 11h36   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
$_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 :
1
2
$name = fonction($_FILES["image"]["name"]);
$fichier = basename(fonction($_FILES['image']['name']));
=>
Code :
1
2
$name = fonction($_FILES["image"]["name"]);
$fichier = basename($name);
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2011, 13h46   #7
Nouveau Membre du Club
 
Inscription : juillet 2010
Messages : 196
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 196
Points : 25
Points : 25
Ok ok je prends tes remarques en compte mais d'où vient ce problème de caractères ?
polux31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2011, 13h55   #8
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
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 ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2011, 15h48   #9
Nouveau Membre du Club
 
Inscription : juillet 2010
Messages : 196
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 196
Points : 25
Points : 25
Voilà ce qu'il y a en haut de mes pages :

Code :
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...
polux31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h46.


 
 
 
 
Partenaires

Hébergement Web