[RESOLU] pb concaténation et écriture alt avec php

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 : [RESOLU] pb concaténation et écriture alt avec php

Re: [RESOLU] pb concaténation et écriture alt avec php

par two3d » 24 nov. 2021, 11:35

Merci pour les références.

Re: [RESOLU] pb concaténation et écriture alt avec php

par ynx » 24 nov. 2021, 10:00

L'utilisation des requêtes préparées avec des marqueurs est la solution recommandée pour éviter les injections sql.
Si on veut concaténer une chaine dans une requête sql, il faut utiliser les fonctions dédiées à l'échappement des caractères réservés spécifiques à la base de données, soit PDO::quote(), mysqli_real_escape_string(), SQLite3::escapeString(), pg_escape_string(), etc.
https://www.php.net/manual/fr/security. ... e.avoiding

Il ne faut pas confondre injections SQL et failles XSS.
L'altération des données avec des entités html avant l'insertion en bdd peut poser plusieurs problèmes. C'est toujours mieux que de ne pas du tout utiliser htmlentities() ou htmlspecialchars() et donc risquer des failles XSS, mais celles-ci ne remplacent pas les fonctions dédiées à l'échappement des caractères pour se protéger des injections SQL.

Control-Z est le caractère ASCII 26 qui peut être considéré comme fin de fichier (end-of-file) sous Windows.
https://dev.mysql.com/doc/refman/8.0/en ... erals.html
https://fr.wikipedia.org/wiki/End-of-file

Re: [RESOLU] pb concaténation et écriture alt avec php

par two3d » 24 nov. 2021, 01:44

D'accord, on peut potentiellement arriver à faire une injection SQL avec les caractères suivants ?

NUL (ASCII 0), \n, \r, \, ', ", and Control-Z

A quoi correspond "Control-Z" ?

Re: pb concaténation et écriture alt avec php

par or 1 » 24 nov. 2021, 00:27

La fonction htmlentities() ne protège pas les chaines contre les injections sql
Ah bon ? Et comment fait-on pour protéger contre la faille SQL ? ça m'intéresse car la faille est réalisée principalement avec " ou ' et qu'avec la fonction htmlentities() sont traduits en entités HTML (avec des paramètres en plus à cette fonction suivant ce que vous voulez traduire en entités).
https://www.php.net/manual/fr/mysqli.re ... string.php ou requete préparée.
htmlentities est bien à réserver pour l'affichage. si par exemple, le texte doit être utilisé dans un email au format texte, les transformations faites vont poser problème.

Re: pb concaténation et écriture alt avec php

par two3d » 23 nov. 2021, 20:20

La fonction htmlentities() ne protège pas les chaines contre les injections sql
Ah bon ? Et comment fait-on pour protéger contre la faille SQL ? ça m'intéresse car la faille est réalisée principalement avec " ou ' et qu'avec la fonction htmlentities() sont traduits en entités HTML (avec des paramètres en plus à cette fonction suivant ce que vous voulez traduire en entités).
Toutes les balises html img devraient avoir un attribut alt (en plus de l'attribut title si besoin).
ALT permet deux choses: l'accessibilité au personnes malvoyantes, pour qu'elles sachent ce que l'image dit et permettre un affichage de texte si l'image n'est pas disponible.

La balise html table ne devrait pas être utilisée pour faire de la mise en page. La balise center est obsolète et ne devrait pas être utilisée. La mise en page et le positionnement des éléments html doit se faire en css.
Tout à fait d'accord, <center> peut être remplacée via un "display block" puis un "margin 0 auto" sur l'élément à centrer pour que ton document soit valide.

Re: pb concaténation et écriture alt avec php

par nestor94 » 23 nov. 2021, 19:25

J'avais pourtant mis dans mon css présent plus haut dans le script
vertical-align:middle; :roll:

N'ayant pas envie de passer des heures là-dessus, J'ai viré la <table> et <td> et là, mon alignement est correct.

Re: pb concaténation et écriture alt avec php

par ynx » 23 nov. 2021, 19:17

Bonjour,

La fonction htmlentities() ne protège pas les chaines contre les injections sql mais permet d'éviter les failles xss. Comme son nom l'indique, cette fonction doit idéalement être utilisée lors de l'affichage dans un document html et pas à l'insertion des données en base car ces données peuvent être destinées à être utilisées dans un autre format.

Toutes les balises html img devraient avoir un attribut alt (en plus de l'attribut title si besoin).
La balise html table ne devrait pas être utilisée pour faire de la mise en page. La balise center est obsolète et ne devrait pas être utilisée. La mise en page et le positionnement des éléments html doit se faire en css.

Enfin, la balise table n'est pas utilisée correctement, celle-ci ne peut avoir de balise td (cellule) en enfant direct, les cellules doivent être dans une balise tr ou th (ligne).
Dans le dernier code, la balise table est inclue dans la boucle while, cela crée donc une table pour chaque image, ce qui explique le problème d'affichage des images à la verticale. Encore une fois les tableaux html ne devraient pas être utilisés pour faire de la mise en page, ton code sera surement plus simple sans balise table, tr et td.

Re: pb concaténation et écriture alt avec php

par two3d » 23 nov. 2021, 18:13

Te faut le gérer avec CSS. Si l'avatar est transféré horizontalement, tu peut tourner l'image avec un rotate() je pense (CSS). (Enfin, il verra bien qu'il à transféré une image penché ^^ et il en transférera une autre, droite).

Re: pb concaténation et écriture alt avec php

par nestor94 » 23 nov. 2021, 18:08

Avec un title, il y a un gros mieux.
    while ($membreVoisin = $pdostat->fetch()) {
?>
<table>
<td><?php echo '<a href="/causerie_perso_id.php?id=' . intval($membreVoisin['id']) . '"><img src="' . htmlentities($membreVoisin['avatar']) . '" title ="' . htmlentities($membreVoisin['pseudo']) .'"></a>';?>
</td>
</table>
<?php
    }
}
?>
Là, ça fonctionne mais les avatars s'affichent à la verticale. existe t-il un moyen pour les afficher à l'horizontale?

Re: pb concaténation et écriture alt avec php

par two3d » 23 nov. 2021, 17:29

Oublie les fonction de chaine lors de la récupération de données dans une table, pense plutôt à le faire avant l'insertion de données pour éviter les failles SQL.

Par exemple: htmlentities($membreVoisin['pseudo'])

Vérifie que $membreVoisin contient bien 'pseudo', 'avatar', etc... tu peux utiliser var_dump pour voir ce que contient une variable https://www.php.net/manual/fr/function.var-dump.php

Pour info un alt n'est pas un title

Re: pb concaténation et écriture alt avec php

par nestor94 » 23 nov. 2021, 17:23

Il n'y a pas de message d'erreur mais ça ne marche pas :(
voici le code "détaillé'
<body>
<br><br>
<center>
<b>personnages présents</b>
<br><br>
<table>
<td>
<?php
$idMembreSession = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
$pdostat = $bdd->prepare('SELECT * FROM membres WHERE id = :id');
$pdostat->bindvalue(':id', $idMembreSession, PDO::PARAM_INT);
$pdostat->execute();
$membreSession = $pdostat->fetch();
if (!empty($membreSession)) {
    // récupération en bdd des membres à la même position que le membre connecté en session
    $pdostat = $bdd->prepare("SELECT * FROM membres WHERE (pos_x = :pos_x AND pos_y = :pos_y) AND (pos_x_ville = :pos_x_ville AND pos_y_ville = :pos_y_ville) AND id!= :id AND vacance = 'OFF' ");
    $pdostat->bindvalue(':id', $idMembreSession, PDO::PARAM_INT);
    $pdostat->bindvalue(':pos_x', $membreSession['pos_x'], PDO::PARAM_INT);
    $pdostat->bindvalue(':pos_y', $membreSession['pos_y'], PDO::PARAM_INT);
    $pdostat->bindvalue(':pos_x_ville', $membreSession['pos_x_ville'], PDO::PARAM_INT);
    $pdostat->bindvalue(':pos_y_ville', $membreSession['pos_y_ville'], PDO::PARAM_INT);
    $pdostat->execute();

    while ($membreVoisin = $pdostat->fetch()) {
 //  echo '<a href="/causerie_perso_id.php?id=' . intval($membreVoisin['id']) . '"><img src="' . htmlentities($membreVoisin['avatar']) . '"></a>';
   echo '<a href="/causerie_perso_id.php?id=' . intval($membreVoisin['id']) . '"><img src="' . htmlentities($membreVoisin['avatar']) . '" alt="' . htmlentities($membreVoisin['pseudo']) .'"></a>';
    }
}
?>
</td></table>

Re: pb concaténation et écriture alt avec php

par two3d » 23 nov. 2021, 16:49

o']) .""></a>';
devrait être:
o']) .'"></a>';

Re: pb concaténation et écriture alt avec php

par finipe » 23 nov. 2021, 16:44

Il y a des problèmes d'espaces dans le code... ça, ça devrait aller mieux :

Code : Tout sélectionner

echo '<a href="/causerie_perso_id.php?id=' . intval($membreVoisin['id']) . '"><img src="' . htmlentities($membreVoisin['avatar']) . '" alt="' . htmlentities($membreVoisin['pseudo']) . '"></a>';

Re: pb concaténation et écriture alt avec php

par or 1 » 23 nov. 2021, 13:13

quel est le résultat généré par ce code php (ctrl + u pour voir la source de la page) ?
quel est le code html qu'il faut générer pour que cela fonctionne ?

pb concaténation et écriture alt avec php

par nestor94 » 23 nov. 2021, 12:54

Bonjour,
ce bout de script affiche tous les membres présents au même endroit. Je voudrais rajouter un attribut alt pour affichage des pseudos mais je galère avec la syntaxe :oops:
   echo '<a href="/causerie_perso_id.php?id=' . intval($membreVoisin['id']) . '"><img src="' . htmlentities($membreVoisin['avatar']) . '"></a>';
j'ai tenté cela mais ca ne va pas.
echo '<a href="/causerie_perso_id.php?id=' . intval($membreVoisin['id']) . '"><img src="' . htmlentities($membreVoisin['avatar']) . 'alt="'. htmlentities($membreVoisin['pseudo']) .""></a>';