CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[php] htmlspecialchars

sd460
sd460
Niveau 10
29 avril 2009 à 19:09:14

bonjour,

j'ai un problème avec cette fonction :(
Son exécution dépend du serveur qui l'exécute. Faut-il ajouter une extesion php à php5 pour que ca fonctionne ?
Car il semble que son exécution marche sur un serveur, mais pas sur un autre...
Car je rencontre un problème avec l'appostrophe ' ce qui crée un problème dans ma requète sql, problème que je n'ai pas sur un autre serveur avec le meme code...

merci :)

godrik
godrik
Niveau 30
29 avril 2009 à 20:22:17

On est jamais cense se reposer sur une extention de fichier. Je pense que dans tous les cas ca depend de la configuration du serveur.

Tu peux donner un exemple que l'on comprenne mieux ?
Tu peux deposer un exemple sur : pastebin.com ainsi que les resultat obtenu sur les deux serveurs ?

sd460
sd460
Niveau 10
29 avril 2009 à 20:45:09

je ne parlais pas de l'extension d'un fichier, mais d'une éventuelle extension php à ajouter (ou à valider tout du moins) à Apache dans Wamp.

Là où j'ai mon problème , c'est pour une requète SQL : Mysql me dit que ca foire à cause de la syntaxe, et manifestement un htmlspecial ne protège pas les ' . :(

Je ne mets pas l'exemple de mon site, car c'est pour afficher une requète sql, du coup cela ne donne aucun résultat visible à l'écran, mais je mets un exemple simple (pas sur pastebin car c'est juste quelques lignes très simple):

<?php

$test="l'image&";
$protect=htmlspecialchars($test);
echo($test);
echo(" ");
echo($protect);

?>

Dans les 2cas j'obtiens le meme affichage, ce qui ne devrait pas etre le cas non ? (le htmlspecialchar ne joue pas son rôle...)

godrik
godrik
Niveau 30
29 avril 2009 à 20:49:58

tu regardes bien la source de la page et pas le rendu de ton navigateur hein ? je n'ai pas de cli php sous la main pour tester mais les resultats devrait etre different en effet.

sd460
sd460
Niveau 10
29 avril 2009 à 21:15:27

boulette :honte:
mon exemple est foireux, en fait ca marche pour le "&" mais pas pour l'apostrophe.
D'après le manuel de php, il faut rajouter une option , donc à la limite, c'est logique que cela ne fonctionne pas.

Ce que je ne comprends pas , c'est pourquoi cela marche sur l'un des serveurs (avec la meme syntaxe).

Je vais redonner un coup d'oeil, voir si je peux mettre un bout de code.

sd460
sd460
Niveau 10
29 avril 2009 à 21:32:38

bien , voici ma requète SQL. Je le répète, normalement la syntaxe est bonne parceque ca fonctionne sur l'un des serveurs.

$query = "INSERT INTO db
(wei, type, auteur, date, titre, text, image, url, email, valid, valid_2, cible)
VALUES
($poids,
'".$_POST['type']."',
'".htmlspecialchars($nom)."',
'".$date."',
'".htmlspecialchars($_POST['titre'])."', '".htmlspecialchars($_POST['texte'])."',
'".$ext."',
'".htmlspecialchars($_POST['url'])."', '".htmlspecialchars($_POST['email'])."',
'".$portail."',
'".$mail."',
'".htmlspecialchars($_POST['cible'])."')";

Voici l'erreur renvoyée quand je met un appostrophe dans le texte par exemple :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'image', 'l'imlage l'imaaa',, , , 'wait', 'wait', 'office')' at line 4 dans
INSERT INTO db
(wei, type, auteur, date, titre, text, image, url, email, valid, valid_2, cible)
VALUES (0, 'news', 'john', '2009-04-29', 'l'image', 'l'image l'imaaa',
, , , 'wait', 'wait', 'office')

Donc ma question serait, pourquoi le htmlspecialchars marche sur un serveur et pas sur l'autre ?

godrik
godrik
Niveau 30
29 avril 2009 à 22:29:11

a mon avis il marche.
Selon php.net http://us.php.net/manual/en/function.htmlspecialchars.php a propos du deuxieme parametre :
The optional second argument, quote_style , tells the function what to do with single and double quote characters. The default mode, ENT_COMPAT, is the backwards compatible mode which only translates the double-quote character and leaves the single-quote untranslated. If ENT_QUOTES is set, both single and double quotes are translated and if ENT_NOQUOTES is set neither single nor double quotes are translated.

Ca dit clairement que par defaut les simples quotes ne sont pas transforme. Et c'est exactement ce qui t'arrive. probablement qu'il y a des varaitions du comportement par defaut dans differentes version de php. Je te suggere de rajouter le parametre ENT_QUOTES a tes appels a htmlspecialchars.

deepblue
deepblue
Niveau 16
29 avril 2009 à 23:10:03

Dans un premier temps, on va revenir sur la fonction htmlspecialchars :
- elle fonctionne de la même façon sur tous les serveurs
- elle ne protège en aucun cas les chaines pour du sql

Dans l'hypothèse où tu fais du mysql et que tu ne fais pas ton code avec une couche d'abstraction (type PDO) : http://fr.php.net/manual/fr/function.mysql-real-escape-string.php

Mais (et il y en faut toujours un pour faire chier), les hébergeurs n'ont pas tous la même configuration php et le truc qui n'aurait jamais du exister et qui s'appelle magic_quotes vient nous ennuyer donc
- http://fr.php.net/manual/fr/function.get-magic-quotes-gpc.php
- avec http://fr.php.net/manual/fr/function.get-magic-quotes-gpc.php#83534

pitfalI
pitfalI
Niveau 9
30 avril 2009 à 12:37:02

"Dans l'hypothèse où tu fais du mysql et que tu ne fais pas ton code avec une couche d'abstraction (type PDO) : http://fr.php.net/manual/fr/function.mysql-real-escape-string.php&quot;

deepblue> et dans le cas où on utilise PDO?? :question:

godrik
godrik
Niveau 30
30 avril 2009 à 16:46:11

Dans ce cas : RTFM

deepblue
deepblue
Niveau 16
30 avril 2009 à 17:32:27

pitfalI : $tonObjet->quote($taChaine)

iscario
iscario
Niveau 7
30 avril 2009 à 17:55:33

deepblue :
"Dans un premier temps, on va revenir sur la fonction htmlspecialchars :
- elle ne protège en aucun cas les chaines pour du sql "

Sauf si on active l'option EN_QUOTES (ou un truc du genre) non :question:

Après activation de l'option magic_quotes ca fonctionne :)

merci!

godrik
godrik
Niveau 30
30 avril 2009 à 20:10:25

htmlspecialchars est fait pour proteger l'injection d'html pas l'injection sql.
protege l'injection de sql avec htmlspecialchars c'est se proteger de la grippe porcine avec une capote et des gants. C'est pas adapte.
Il y a des fonctions dediees a la protection de l'injection sql comme mysql-espace-string (or whatever) ou pdo::quotes si on utilise pdo.
Il faut utiliser ces fonctions!

PS: j'ai cru comprendre que les magics quotes amenaient plus de probleme que de solution!

deepblue
deepblue
Niveau 16
30 avril 2009 à 22:27:33

Godrik +1

iscario -> Convertir tout en html c'est déjà débile si on est dans un contexte qui ne demande pas de faire du html et si tu est susceptible d'utiliser les données avec d'autres langages, tu n'est pas certain que tu puisses facilement faire la conversion inverse.

pitfalI
pitfalI
Niveau 9
30 avril 2009 à 23:17:16

bon c'est décidé, je vais me mettre au PDO, merci deep :-)))

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment