[php][html] confidentialité d'éléments texte

Fermé
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 - 6 janv. 2009 à 14:52
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 - 6 janv. 2009 à 19:19
Salut à tous,

je suis en train de développer une petite application en php qui est en quelque sorte un mini moteur de blog, afin de journaliser ce que je fais pendant un stage en entreprise.

J'aimerais pouvoir mettre dans mes articles des données confidentielles uniquement visibles par moi, ou les membres de l'entreprise.

Pour ce faire, je prévois de mettre en place une variable $_SESSION["conf"], qui sera attribuée lorsque je mettrai un mot de passe dans un formulaire. ainsi, j'aimerais pouvoir ajouter dans mes articles des balises <conf></conf> dont le contenu ne sera pas affiché sur la page ni dans le code source de la page dans le cas !isset($_SESSION["conf"]).

ou alors dans le cas ou $_SESSION["conf"]==une certaine valeur, ou ==true, bref ça c'est facile.

je précise que le contenu des article sera stocké dans une base SQL (très probablement postgre), mais ce contenu dans le base contiendra des balises genre <b> ou <p>. il faudrait donc que quand php récupère le contenu du champ, il le scanne en quelque sorte pour trouver ces balises.


1 est-ce que c'est possible ? peut-on créer des balises comme ça ?

2 comment fait-on ? pour que php les détecte et supprime ce qu'il y a entre-elles ?

merci de m'avoir lu et encore plus si vous pouvez m'aider
A voir également:

6 réponses

niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
6 janv. 2009 à 15:06
ah je me suis mal exprimé alors.

je souhaite que l'article soit visible par mes professeurs, mais que certaines parties ne le soient pas.

exemple:

le mot de passe pour la réserve de champagne du patron, <conf> qui est azerty123,</conf> permettent de boire un coup après le boulot.

(désolé pas trouvé mieux comme exemple ^^)
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
6 janv. 2009 à 15:15
Bonjour Niahoo,
Alors je pense avoir compris ta problématique, mais peut-être que je n'ai pas bien saisi certains points.

A mon avis, la solution la plus simple, c'est d'utiliser des fichiers xml. Comme ça tu peux définir ta balise <conf></conf> comme un tag xml.
Ensuite, tu stockes tes articles (contenant des tags <html>, <head>, <body>, <div>, <conf>... tout ce que tu veux dans ta base de données).
Grâce à php, lors de l'affichage d'une page, tu vas chercher ton xml dans ta base de données, et tu vas le traiter avant de l'envoyer au client si $_SESSION["conf"] n'existe pas (si la variable existe, il faut le traiter aussi pour modifier tes balises <conf> en balises <P class="confidentiel"> par exemple).
Le plus simple ici, c'est d'utiliser une transformation xslt : ça parcourt l'arbre DOM de ton fichier xml, et tu peux définir des règles (ici ce sera très simple : on supprime tous les noeuds <conf>blabla</conf>).
Ensuite le rendu final est envoyé au navigateur qui interprète le code reçu.

Au niveau de la sécurité c'est pas mal (les données confidentielles ne sont en aucun cas envoyé au client s'il n'est pas autorisé à les avoir).

Voilà, maintenant, pour optimiser encore l'affaire, je reviens sur mon "<P class="confidentiel">". A mon avis ce serait plus efficace car tu n'aurais même plus besoin de faire une transformation xml->html lorsque $_SESSION["conf"] existe (c'est un peu de temps de gagné).

Cordialement,
0
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
6 janv. 2009 à 15:21
ok je vais me renseigner sur xslt pour les moyens de supprimer les "nœuds" de mon texte. pour le reste, ce sera moins compliqué, vu que je ne stocke pas dans la base les parties head, body. l'article contiendra uniquement du texte et quelques rares balises <b>, <p> etc.. et sera collé à l'intérieur d'un div.. alors comme ça ne contient que des balises html le navigateur n'aura pas de problème.

ça suppose quand même que ton programme xslt n'aie pas besoin de recevoir une partie head ou autres en-têtes dans ce que je lui envoie.

je vais voir ça après le boulot ce soir je reviendrai poster si ça marche ou pas.

merci !
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
6 janv. 2009 à 15:32
Effectivement, les transformation xsl ne nécessitent qu'un fichier (ou flux) xml en entrée, et te sortent un fichier (ou flux) xml en sortie (et html étant un sous-ensemble de xml si je puis dire, ça fonctionne très bien). Si tu ne veux stocker que tes articles (et effectivement c'est beaucoup mieux !), tu peux effectivement te passer des entête html, il n'y a pas de soucis.

Tiens nous au courant donc !
Cordialement,
0
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
6 janv. 2009 à 16:24
bon j'ai trouvé une solution purement php.

je vais quand même essayer de voir ce que ça donne ce soir avec xml/xsl pour apprendre des nouveaux trucs qui seront surement applicables dans de nombreuses situations, si je veux par exemple faire des parties confidentielles, mais d'autres à mettre en evidence selon le lecteur, etc..


ma solution php (écrite comme ça en monde texte sans test, donc à corriger

$sql="SELECT contenu FROM articles WHERE id='".$_GET["id"]."'";
$rs=pg_exec($connexion, $sql);
$row=pg_fetch_assoc($rs);

ici on va considérer que mon texte est le suivant, avec comme séparateurs non plus <conf> </conf> mais #conf #;
on veut cacher le nom d'une personne
"Bonjour monsieur Jean#conf Dupont#. Comment ça va ?"


$texte=$row["contenu"];

if(!isset($_SESSION...))
{

//$texte= texte a afficher

$tab=explode('#', $texte);
$k= fonction qui permet de connaitre le nombre d'entrées du tableau $tab, je la connais plus
$j=$k-1;
$nouveau_texte="";

for($i=0, $i<=$j, $i++)
{
if(substr($tab[$i], 0, 4)!="conf")
{
$nouveau_texte.=$tab; // équivalent de $nouveau_texte=$nouveau_texte.$tab;
}
}

echo($nouveau_texte);

}

else { echo $texte; }
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Si j'ai bien compris tu veux que certaines données ne soit vu que par toi...

Dans ta BDD, tu crée un champs "rang" dans la table où sont stocké les membres. Quant un membre s'inscrit on lui attribut par défaut le rang "membre". Pour ton compte perso, on va crée un autre rang, par exemple "admin".

Quant un utilisateurs se connecte, on initialise la variable de session correspondant au rang(autrement dit on va chercher le rang de l'utilisateur dans la BDD).

Pour que des données ne soit visibles que par les membre du rang "admin"on notera donc :

: if ($_SESSION['rang']== admin)
{
echo ' ICI TES DONNES CONFIDENTIELLES';
}


Est ce ce que tu cherchais ?
0
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
6 janv. 2009 à 19:19
oui je ne veux cacher qu'une partie du post, et ces parties peuvent êtres multiples et n'importe ou dans le post.

mais j'ai trouvé ma soluce tout seul en php, maintenant je découvre xml mais c'est très .. extensible comme domaine !

merci en tout cas.

et j'ai le net grâce à mon bienveillant proprio vive lui
0