strip_tags intempestif !

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : strip_tags intempestif !

par Lamy » 16 mai 2008, 12:09

Par insertion forcée dans la base par script ça marche.
C'est pour l'instant comme ça que je mets à jour ma base : en saisissant les données en local, en exportant un script et en l'important sous phpmyadmin ...

par caroube » 16 mai 2008, 10:07

Visiblement, le $_POST contient bien les balises, mais c'est au niveau de la base de données qu'elles ne sont pas enregistrées.


Essaye en interactif avec phpmyadmin d'insérer des trucs simples (juste un tag "<i>" par exemple ou "<i>abc</i>") et voit ce que ça donne.

par Cyrano » 16 mai 2008, 09:58

Tu connais htmlentities() et html_entity_decode() :?:

par Lamy » 16 mai 2008, 09:32

Dans mes exemples de requêtes : les balises était saisies autours du mot Paris pour le mettre en italiques, en local les balises sont conservées alors qu'en distant elles ne le sont pas.
A l'affichage, l'instruction "echo" envoie les balises à HTML elles sont donc interprétées normal qu'on ne les voie pas, mais in en voie l'effet : Paris est en italiques ...
Non : je ne comprend pas !

par Cyrano » 15 mai 2008, 22:46

Dans tes exemples de requêtes, je ne vois aucune balise HTML : donc, soit elles ont sauté avant, soit elles n'ont jamais existé....

Allez, bonne nuit, je suis plus là pour ce soir ;)

par Lamy » 15 mai 2008, 22:33

J'ai effectivement
magic_quotes_gpc = On
les autres à off, mais j'ai reproduit la même config en local ...
De toutes façons : ça marche pour les ', mon souci c'est les balises ...

par Cyrano » 15 mai 2008, 22:29

ça sent le doublon entre magic_quotes et add_slashes()... vérifie donc la configuration de ton serveur distant...

par Lamy » 15 mai 2008, 22:18

Voila : c'est tres curieux, j'obtiens sur le site distant :
UPDATE ACTUALITES SET TITRE = 'Conférence', MESSAGE = 'Le 2 Juin 2008 se tiendra à Paris une conférence donnée par Patrick Guibal. Chargé de mission aux musées d\\\'Ile-de-France il a été commissaire d\\\'exposition.
Avec :
- Des triples "\"
- Le mot Paris et non <I>Paris</I>

Sur le site local :
UPDATE ACTUALITES SET TITRE = 'Conférence', MESSAGE = 'Le 2 Juin 2008 se tiendra à Paris une conférence donnée par Patrick Guibal. Chargé de mission aux musées d\'Ile-de-France il a été commissaire d\'exposition.
C'est à dire la même chose mais avec des simples "\"

Mais les données sauvegardées en bases sont différentes :
- En site distant : les balises ne sont pas sauvegardées : "...se tiendra à Paris une..."
- En site local : les balises sont sauvegardées : "...se tiendra à <I>Paris</I> une..."
Bref : ça ne va pas !

par Cyrano » 15 mai 2008, 22:12

Prends ton temps, de toutes façons pour moi j'ai mon quotat pour ce soir, je vais aller dormir, je bosse demain.

En tout état de cause : tu as affaire à des machines qui ne comprennent qu'une seule chose : la logique ;)

par Lamy » 15 mai 2008, 21:52

Je vais essayer mais à mettre sur le site distant ça va me prendre un peu de temps ...

par Cyrano » 15 mai 2008, 21:42

Vérifie donc la nature réelle de tes requêtes en les faisant afficher avant exécution, un simple echo($sql); fera l'affaire :-k

par Lamy » 15 mai 2008, 21:31

Non je ne crois pas : voici mon code : 2 fonctions sont concernées : le problème se pose pour le champ "message" bien sûr : le champ "titre" est laissé exprès ...
function ajouter_actualites() 
{
        $date = date("d-m-Y");
        $titre = trim($_POST['titre']);
        // interdiction du html avec strip_tags
        $titre = strip_tags(addslashes($titre));
        $message = addslashes($_POST['message']);
        $sql = "INSERT INTO actualites VALUES ('','".$date."','".$titre."','".$message."')";
        mysql_query($sql);
}
// La fonction de modification d'une actu
// les actualités restantes après suppression.
function modifier_actualites() 
{
        $date = date("d-m-Y");
        $titre = trim($_POST['titre']);
        $titre = strip_tags(addslashes($titre));
        $message = addslashes($_POST['message']);

        $sql = "UPDATE ACTUALITES SET TITRE = '".$titre."', MESSAGE = '".$message."' WHERE ID = '".$_POST['id']."'";
        mysql_query($sql);
}

par Cyrano » 15 mai 2008, 21:18

Sans voir la moindre ligne du code, ça va être difficile. Les directives sur les magic_quotes n'influenceront pas la présence de balises HTML, donc le problème est ailleurs... aurais-tu quelque part dans ton code un strip_tags() intempestif qui s'intercalerait entre ton formulaire et l'enregistrement ?

strip_tags intempestif !

par Lamy » 15 mai 2008, 21:12

Bonjour, j'ai développé une partie (protégée) de mon site avec pour but sa maintenance distante par quelques personnes habilitées.
Notamment : je voudrais avoir la possibilité de saisir et modifier une rubrique "actualité" dans laquelle je veux pouvoir mettre des balises <I>, <U> et <A>, etc ... pour que l'affichage des lignes après requête donne un rendu italique, souligné, lien etc ...
Pour cela j'ai bien ommis volontairement d'utiliser l'instruction "strip_tags" que j'emploie pour la prise en compte des saisies situées sur les parties non protégées, en local tout marche à merveille mais une fois sur le site distant les balises en question sont systématiquement retirées et ne sont pas stockées en base, pourquoi cette différence ? Y aurait-il des paramètres (genre magic_quotes) à définir différement sur le site distant ?
Merci de me donner un coup de main !