Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
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 25/11/2010, 19h09   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
Par défaut Suis-je au point niveau SECU ?

Ai-je bien tout compris :

1)quand avant d'enregistre une variable dans ma bdd, je la sécurise avec :
- htmlspecialchars()
- et mysql_real_escape_string()
ex :
Code :
$message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
2) avant d'afficher du texte qui vient de ma bdd je la reséurise avec:
- htmlspecialchars()
ex :
Code :
echo htmlspecialchars($_POST['message']);
ou est-ce inutile, car j'ai déja mis le htmlspecialchars(), à l'enregistrement (voir juste au dessus)?
et inverse si je ne l'ai pas mis à l'enregistrement le mettre a l'affichage?

3) si j'affiche directement du texte qui a été tappé par le visiteur sans passer par la bdd un
- htmlspecialchars()
suffit'il avant de le tranmettre a l'autre page de mon siteou avnt son affichage sur mon autre page

4)quand je récupère une variable dans mon url qui doit absolumemnt etre un nb
je fait un intval()
ex:
Code :
$page = intval($_GET['page']);
si vous avez des choses a comfirmer, corrigé ou a ajouter je suis tout ouie !!!

merci beaucoup !
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 19h31   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 815
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 815
Points : 3 440
Points : 3 440
Pour le htmlspecialchars( ) :
C'est soit AVANT soit APRES la requête mais pas les deux.
Sinon tu te retrouveras avec des caractères doublement échappés.
Personnellement je préfère le faire uniquement à l'affichage de manière à conserver une bdd la plus neutre possible.

Citation:
3) si j'affiche directement du texte qui a été tappé par le visiteur sans passer par la bdd un
- htmlspecialchars()
suffit'il avant de le tranmettre a l'autre page de mon siteou avnt son affichage sur mon autre page
Pas sûr d'avoir compris, mais tout ce qui est saisi par l'utilisateur doit être échappé à l'affichage par un htmlspecialchars( ).
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/11/2010, 19h52   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
ok merci c'est parfait, tes réponses me vont nickel, je comprend mieux
sinon le reste te semble juste?

autre chose :
parfois un as besoin de mettre un stripsalsh avent l'enregistrrment dans la bdd
genre :
$titre = stripslashes(mysql_real_escape_string($_POST['titre']));

je mets le stripslashes avant le mysql_real_escape_string, ou inversement et pourquoi?

5)mais je ne comprends pas le principe, pourquoi le stripslashes se met avant l'enregistrement, alors que c'est au moment de l'enregistrement qu'il sont ajouté dans la bdd, là comprends pas

merci
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 19h58   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 815
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 815
Points : 3 440
Points : 3 440
Citation:
Envoyé par artichaudd Voir le message
ok merci c'est parfait, tes réponses me vont nickel, je comprend mieux
sinon le reste te semble juste?
Yep.

Citation:
autre chose :
parfois un as besoin de mettre un stripsalsh avent l'enregistrrment dans la bdd
genre :
$titre = stripslashes(mysql_real_escape_string($_POST['titre']));

je mets le stripslashes avant le mysql_real_escape_string, ou inversement et pourquoi?
Un stripslahes( ) est nécessaire uniquement si ces horreurs de magic-quotes sont activées.
Regarde get_magic_quotes_gpc( ) à ce propos ( http://www.php.net/manual/fr/functio...quotes-gpc.php ).
Je te conseille de nettoyer GET/POST/COOKIE en début de page si les magic-quotes sont actives, ainsi la question ne se posera plus et un simple mysql_real_escape_string( ) suffira.

Citation:
5)mais je ne comprends pas le principe, pourquoi le stripslashes se met avant l'enregistrement, alors que c'est au moment de l'enregistrement qu'il sont ajouté dans la bdd, là comprends pas
Pas compris.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 20h21   #5
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
merci, c'est de plus en plus clair !!!

ma question "pas claire" était que je ne comprends pourquoi le stripslaches se sur la variable eavnt l'enregistrement, alors que c'est au momment de l'enregistrement que le serveur les rejoutes?

Sinon tu me conseille de nettoyer GET/POST/COOKIE en début de page, ca m'intéresse énormément ! comme dirait certain!
car j'ai effectivement ce genre de pb

comment nettoie tu ca
avec ca par exemple :
ini_set('magic_quotes_runtime', 0);

ou tu a s mieux merci
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 20h44   #6
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Ce qui a été dit est juste, je ne remets en rien en compte mais je poste pour te donner une autre solution, pour "approfondir" le point de vu.

Je te propose une autre solution. Un peu plus "complexe" à la base mais bien plus efficace et compréhensible à long terme et PORTABLE. Je m'explique.

Il existe une magnifique chose qui s'appelle "PDO" en fait PDO c'esst quoi? Bah c'est une méthode d'accès aux bases de données. Mais ce qui est bien, c'est que tu fais ta requetes avec PDO, mais tu n'as pas besoin derrière de te soucier de quelle type de base de données tu as. (postGRE, MySql, etc...)

Là ou je veux en venir c'est que, ce qui est bien aussi avec PDO, c'est que ça sécurise de base tes requetes et que tu n'as pas besoin de tous ces traitements avec htmlspecials chars etc....

Je t'invite à lire ceci: Accès aux données

En gros, une requete ce passe comme ça:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<?php
//connexion à la base de données
$db = new PDO('mysql:host=localhost;dbname=developpez', 'utilisateur', 'motdepasse');
 
//on prépare et execute la requete. Le fait de préparer la requete sécurise les données.
$query = $db->prepare('SELECT nom, prenom FROM utilisateurs WHERE id = :id');
$query->BindValue(':id', (int)$_GET['id']);
$query->execute();
 
//on assigne le resultat dans $resultat
$resultat = $query->fetch(PDO::FETCH_ASSOC);
?>
Alors certes je t'accorde que ça peut parraître farfelu au début mais c'est sécurisé et franchement, assez simple. Je te conseille de te renseigner sur PDO

Autre chose, l'interêt de préparer des requetes avec PDO, c'est justement, de les preparer.

Donc ne pas faire.

Code :
1
2
3
 
$query = $db->prepare('SELECT nom, prenom FROM utilisateurs WHERE id = '.$_GET['id']);
$query->execute();
Je sais que ce n'est pas exactement ce que tu voulais, mais je pense avoir fais ma B.A en expliquant une méthode "sécurisée" ^^
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 23h19   #7
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 815
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 815
Points : 3 440
Points : 3 440
Citation:
Envoyé par artichaudd Voir le message
ma question "pas claire" était que je ne comprends pourquoi le stripslaches se sur la variable eavnt l'enregistrement, alors que c'est au momment de l'enregistrement que le serveur les rejoutes?
Le serveur (lequel ?) ne rajoute pas de lui-même d'antislashes au moment précis de l'enregistrement.

Citation:
Sinon tu me conseille de nettoyer GET/POST/COOKIE en début de page, ca m'intéresse énormément ! comme dirait certain!
car j'ai effectivement ce genre de pb

comment nettoie tu ca
avec ca par exemple :
ini_set('magic_quotes_runtime', 0);
magic_quotes_runtime c'est encore autre chose, le plus souvent cette directive est désactivée. Concernant magic_quotes_gpc ini_set( ) est inutilisable car au moment de l'appel le mal est déjà fait. Regarde la doc : http://www.php.net/manual/fr/ini.list.php, magic_quotes_gpc n'est modifiable que dans le php.ini, un .htaccess ou le httpd.conf.

Citation:
ou tu a s mieux merci
Oui, à mettre en haut de chaque page :

Code :
kill_magic_quotes_gpc( ) ;
La fonction étant :

Code :
1
2
3
4
5
6
7
8
function kill_magic_quotes_gpc( )
{
    if ( get_magic_quotes_gpc( ) == 1 ) {
        recursive_stripslashes($_GET) ;
        recursive_stripslashes($_POST) ;
        recursive_stripslashes($_COOKIE) ;
    }
}
recursive_stripslashes( ) :

Code :
1
2
3
4
5
6
7
8
9
10
function recursive_stripslashes(&$array)
{
    foreach ( $array as &$element ) {
        if ( is_array($element) ) {
            recursive_stripslashes($element) ;
        } else {
            $element = stripslashes($element) ;
        }
    }
}
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 18h47   #8
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
ok super donc
je met ce que tu m'as dis en haut de chaques pages
enfin juste celles qui enregistrent des données? ou vraiment toutes?

et que signifie l'autre code recursive_stripslashes( )
elle sert a quoi exactement

merci
artichaudd 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 19h41.


 
 
 
 
Partenaires

Hébergement Web