Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
720 connectés 

 


Pour ou contre du changement sur le topic ?


 
35.7 %
 5 votes
1.  Oui, faq / bonnes pratiques + blabla@php
 
 
0.0 %
        0 vote
2.  Oui, blabla@php uniquement
 
 
7.1 %
 1 vote
3.  Ce topic mérite la poubelle. Pauvre poubelle
 
 
21.4 %
 3 votes
4.  Non, ce topic reste tel quel
 
 
35.7 %
 5 votes
5.  Obiwan n'aime pas le php
 

Total : 16 votes (2 votes blancs)
Ce sondage est clos, vous ne pouvez plus voter
 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  64  65  66  67  68  69
Auteur Sujet :

blabla@php | faq et bonnes pratiques page 1

n°2307297
Guillaume1​958
Posté le 05-11-2017 à 13:03:57  profilanswer
 

Reprise du message précédent :
 :heink: Ben oui !
... J'ai fait une recherche sur le mot "Windev" dans cette section... Ok, les nobles codeurs d'HFR exècrent.
 
 Bon je m'en vais vers developpez.com qui me semble autrement plus ouvert... [:onizuka_dark]

mood
Publicité
Posté le 05-11-2017 à 13:03:57  profilanswer
 

n°2307299
kontas
Photographe amateur daltonien
Posté le 05-11-2017 à 14:10:12  profilanswer
 

C'est surtout que c'est un topic PHP, tu fait du php avec WindeV ?? :O

n°2307301
Guillaume1​958
Posté le 05-11-2017 à 14:46:03  profilanswer
 

:jap: Ah oui, zut, je ne suis pas sur le bon topic !


Message édité par Guillaume1958 le 11-11-2017 à 12:16:12
n°2307878
pjulienne
Posté le 19-11-2017 à 23:52:48  profilanswer
 

<?php $mention = 'excellent'; echo 'Tu fais un' . $mention . 'travail !' ?>

n°2307882
Ydalb
In Crêpes n' Cidre I Trust!
Posté le 20-11-2017 à 09:14:19  profilanswer
 

Quelle est la question ? :o


---------------
:o
n°2307883
TheCreator
zwiiiii and then shbrouk tak
Posté le 20-11-2017 à 09:23:13  profilanswer
 

manque quelques whitespaces :o


---------------
La superstition c'est comme ceux qui réparent les fauteuils, il faut que le bois qu'ils rajoutent soit à peu près comme l'autre bois sinon ça se voit trop.
n°2308049
Profil sup​primé
Posté le 26-11-2017 à 09:51:13  answer
 

Bonjour,
 
comment appelle-t-on ce format de donnees ?
 

a:2:{i:1;a:0:{}s:10:"helloworld";i:1;}

n°2308052
ratibus
Posté le 26-11-2017 à 11:09:32  profilanswer
 


Serialisation
 
C’est une sortie de la fonction serialize de PHP

n°2308053
Profil sup​primé
Posté le 26-11-2017 à 11:51:19  answer
 

merci beaucoup :jap: :jap: :jap:

n°2309655
potemkin
Optimisateur relativiste.
Posté le 07-01-2018 à 12:30:05  profilanswer
 

kao98 a écrit :


Ca n'explique pas le

Code :
  1. echo $value; //20


qui affiche 20, et pas 19.999... :o


$value a été casté en int :o

 


#drapdéguisé
edit: punaise, 1 page en 1 an :D


Message édité par potemkin le 07-01-2018 à 12:31:32
mood
Publicité
Posté le 07-01-2018 à 12:30:05  profilanswer
 

n°2311695
Agmoh
¯\_(ツ)_/¯
Posté le 27-02-2018 à 21:24:42  profilanswer
 

drap.
 
Quelqu'un a deja utilisé un CMS sous symfony ? J'en vois quelques un passer: Sulu, VictoireCMS etc... mais jamais testé.

n°2318948
MaybeEijOr​Not
but someone at least
Posté le 10-08-2018 à 19:09:44  profilanswer
 

Jamais vu ce topic.
 
Pour revenir sur la problématique des nombres à virgule flottante :

Code :
  1. <?php
  2. $value[0] = 100 * (0.2 - 0);
  3. $value[1] = 100 * (1.2 - 1);
  4. $value[2] = 100 * (2.2 - 2);
  5. $value[3] = 100 * (3.2 - 3);
  6. $value[4] = 100 * (4.2 - 4);
  7. $value[5] = 100 * (5.2 - 5);
  8. $value[6] = 100 * (6.2 - 6);
  9. $value[7] = 100 * (7.2 - 7);
  10. $value[8] = 100 * (8.2 - 8);
  11. $value[9] = 100 * (9.2 - 9);
  12. $value[10] = 100 * (10.2 - 10);
  13. $value["0.2"] = 100 * 0.2;
  14. $value["0.19"] = 100 * 0.19;
  15. $value["0.199"] = 100 * 0.199;
  16. $value["0.1999"] = 100 * 0.1999;
  17. $value["0.19999"] = 100 * 0.19999;
  18. $value["0.199999"] = 100 * 0.199999;
  19. $value["0.1999999"] = 100 * 0.1999999;
  20. $value["0.19999999"] = 100 * 0.19999999;
  21. $value["0.199999999"] = 100 * 0.199999999;
  22. $value["0.1999999999"] = 100 * 0.1999999999;
  23. $value["0.19999999999"] = 100 * 0.19999999999;
  24. $value["0.199999999999"] = 100 * 0.199999999999;
  25. $value["0.1999999999999"] = 100 * 0.1999999999999;
  26. $value["0.19999999999999"] = 100 * 0.19999999999999;
  27. $value["0.199999999999999"] = 100 * 0.199999999999999;
  28. $value["0.1999999999999999"] = 100 * 0.1999999999999999;
  29. $value["0.19999999999999999"] = 100 * 0.19999999999999999;
  30. foreach($value as $key => $val) {
  31.    echo $key.': '.(int)$val.'<br>';
  32. }
  33. $value1 = 100 * (round(1.198659856256548, 2) - 1);
  34. $value2 = 100 * round(1.198659856256548 - 1, 2);
  35. echo 'value1: '.(int)$value1.'<br>value2: '.(int)$value2;
  36. ?>


 
1,2 en double binaire s'écrit : 0 01111111111 0011001100110011001100110011001100110011001100110011
2,2 en double binaire s'écrit : 0 10000000000 0001100110011001100110011001100110011001100110011001
7,2 en double binaire s'écrit : 0 10000000001 1100110011001100110011001100110011001100110011001100
8,2 en double binaire s'écrit : 0 10000000010 0000011001100110011001100110011001100110011001100110
 
-1 en double binaire s'écrit :  1 01111111111 0000000000000000000000000000000000000000000000000000
-2 en double binaire s'écrit :  1 10000000000 0000000000000000000000000000000000000000000000000000
 
Je vous laisse faire les additions et découvrir le résultat. (bon c'est galère les calculs en IEEE 754 alors je suis gentil je vous laisse un lien : http://weitz.de/ieee/ )
La conversion float --> integer va tronquer le nombre ce qui explique les premiers résultats.
Le résultat de 100 * 0.19999999999999999 s'explique par la capacité limité du double.
 
L'astuce est donc d'arrondir le résultat du calcul avant d'opérer la conversion de type.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2320282
grosbin
OR die;
Posté le 06-09-2018 à 12:17:14  profilanswer
 

Hello,
 
Cela vous arrive souvent que le lead dev de votre équipe commite directement du code sur le master en omettant de déclarer ses méthodes et tests, ce qui donne des erreurs 500 partout lors du déploiement en prod ?
 
Cela n'arrive t-il qu'à moi ou je rêve éveillé ? ..  :jap:

Message cité 1 fois
Message édité par grosbin le 06-09-2018 à 12:28:42

---------------
Photos Panoramiques Montagnes Haute Savoie
n°2320300
flo850
moi je
Posté le 06-09-2018 à 15:31:41  profilanswer
 

tester c'est douter
corriger c'est abdiquer :o


---------------

n°2320366
kao98
...
Posté le 07-09-2018 à 08:34:02  profilanswer
 

grosbin a écrit :

Hello,

 

Cela vous arrive souvent que le lead dev de votre équipe commite directement du code sur le master en omettant de déclarer ses méthodes et tests, ce qui donne des erreurs 500 partout lors du déploiement en prod ?

 

Cela n'arrive t-il qu'à moi ou je rêve éveillé ? .. :jap:


L'erreur est humaine, oublier de commiter des changements ou coder des conneries ça arrive

 

Ce qui est étonnant ici c'est que ce soit déployé. Vous avez pas de CI? Ou pas même un process de qualif basique, au pire manuel, avant de deployer ?


Message édité par kao98 le 07-09-2018 à 08:34:55

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°2320367
grosbin
OR die;
Posté le 07-09-2018 à 08:43:27  profilanswer
 

Qq'un a désactivé certains tests apparement, au lieu de les maintenir, return true cela ne s'invente pas .. :jap:  
 
En même temps il sort de sa super école, c'est son 1er poste est nous casse les pieds car il manque une étoile dans un docblock .. [:vags]


Message édité par grosbin le 07-09-2018 à 08:48:07

---------------
Photos Panoramiques Montagnes Haute Savoie
n°2320368
kao98
...
Posté le 07-09-2018 à 08:54:08  profilanswer
 

Et il est lead dev !?  :heink:


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°2320370
bixibu
Ca ... c'est fait!
Posté le 07-09-2018 à 09:31:18  profilanswer
 

kao98 a écrit :

Et il est lead dev !?  :heink:


 
+1000 Y'a un ptit soucis chez vos RH

n°2328602
depart
Posté le 02-02-2019 à 15:47:45  profilanswer
 

Question du jour :
J'ai une appli web, avec plusieurs utilisateurs, chaque utilisateur peut stocker des fichiers dans l'appli, ces fichiers doivent être chiffrés sur le disque du serveur.
Pour chaque user j'ai donc généré une clé. Pour l'instant cette clé est stockée en clair dans la bdd (et par exemple pas chiffrée via le pass de l'utilisateur) car le risque de perte de mot de passe des utilisateurs est important et ils voudront absolument pouvoir récupérer leurs fichiers même s'ils ont perdu leur pass.
Du coup ça me fait un peu bizarre que l'appli chiffre direct les fichiers avec la clé qui est en clair dans la base de données, mais en même temps je ne vois pas trop l'intérêt d'aller plus loin :
- soit la bdd est compromise et du coup elle permet de récupérer la clé, ok mais on n'en fait pas grand chose, c'est juste une chaine qui ne permet d'accéder à rien (c'est pas un mot de passe permettant l'accès à l'appli par exemple)
- soit l'accès aux fichiers du serveur est compromis, ce qui veut dire que le "hacker" aura accès aux fichiers stockés (code + fichiers utilisateur), donc au mot de passe de la bdd (dans le fichier de config php), donc en fait à tout et donc rien de ce que je puisse faire par ailleurs n'apportera la moindre protection.
 
Je passe à côté de quelque chose ? Il y aurait mieux à faire ?
 
Les 2 autres approches auxquelles je pense :
- chiffrer la clé utilisateur via une fonction quelconque via l'appli avant de la stocker en bdd (et la déchiffrer avant de l'utiliser). Mais comme je disais plus haut, si quelqu'un à accès au système de fichier ça n'apporte pas grand chose.
- trouver une solution (un système avec 2 clés) pour par exemple chiffrer/déchiffrer les fichiers avec une clé (fixe) issue de l'appli et une autre issue de l'utilisateur (stockée dans la bdd). Esprit "banque" où il faut la clé de la banque et celle du client... en pratique je ne vois pas trop comment chiffrer un fichier (j'utilise sodium) avec 2 clés. En gros comment générer une 3è clé (qui sera toujours la même) à partir d'une fonction prenant en entrée 2 clés différentes. Une clé (après un bin2hex) c'est 64 caractères hexa, je ne me vois pas les additionner :) Après même chose qu'au dessus : si on a accès aux fichiers, on à accès aux 2 clés.
 
Bref je suis preneur d'idées sur le sujet qui apportent une amélioration de la sécurité générale, et pas juste de la complexité qui ne sert à rien :)


Message édité par depart le 03-02-2019 à 14:49:23
n°2328612
depart
Posté le 03-02-2019 à 14:42:12  profilanswer
 

Autre question, cette fois sur les "prepared statements" pour les requêtes SQL.
 
Vous "préparez" toutes les variables, même celles dont vous êtes sûrs ou seulement celles qui proviennent de l'extérieur ?
 
Exemple :
J'ai un select qui requiert le passage d'une clé à tous les champs chiffrés en bdd (via AES_ENCRYPT et AES_DECRYPT), donc en gros, chaque select devient un truc du genre ;

$query = "SELECT AES_DECRYPT(nom,'".$macle."') AS nom, AES_DECRYPT(prenom,'".$macle."') AS prenom, ...
WHERE user_id = ".$user_id."
AND date BETWEEN ? AND ?
ORDER BY date" ;
$stmt = $db->prepare($query);
$stmt->bind_param("ss", $d_debut, $d_fin);
...


 
Sachant que là j'ai juste mis quelques éléments, mais typiquement :
- $user_id est un truc totalement interne, absolument pas manipulable de l'extérieur (id de l'utilisateur courant, stocké en bdd/session...)
- $macle est le résultat d'une fonction qui va récupérer la clé de l'utilisateur $user_id
Bref, ces choses là sont "fixes", et je me vois mal polluer tous les bind_param avec ça car pour le moindre select ça va me faire style 10 ou 20 paramètres, auxquels il faut que j'ajoute le type, ... déjà qu'en temps normal c'est illisible, alors si je rajoute ça... En même temps ça fait un peu bricolage de passer des trucs en dur et d'autres en paramètres de statement...
 
Avis ?

Message cité 2 fois
Message édité par depart le 03-02-2019 à 17:12:31
n°2328614
skeye
Posté le 03-02-2019 à 15:03:38  profilanswer
 

depart a écrit :

Autre question, cette fois sur les "prepared statements" pour les requêtes SQL.

 

Vous "préparez" toutes les variables, même celles dont vous êtes sûrs ou seulement celles qui proviennent de l'extérieur ?

 

Exemple :
J'ai un select qui requiert le passage d'une clé à tous les champs chiffrés en bdd (via AES_ENCRYPT et AES_DECRYPT), donc en gros, chaque select devient un truc du genre ;

$query = "SELECT AES_DECRYPT(nom,'".$macle."') AS nom, AES_DECRYPT(prenom,'".$macle."') AS prenom, ...
WHERE AND user_id = ".$user_id."
AND date BETWEEN ? AND ?
ORDER BY date" ;
$stmt = $db->prepare($query);
$stmt->bind_param("ss", $d_debut, $d_fin);
...

 

Sachant que là j'ai juste mis quelques éléments, mais typiquement :
- $user_id est un truc totalement interne, absolument pas manipulable de l'extérieur (id de l'utilisateur courant, stocké en bdd/session...)
- $macle est le résultat d'une fonction qui va récupérer la clé de l'utilisateur $user_id
Bref, ces choses là sont "fixes", et je me vois mal polluer tous les bind_param avec ça car pour le moindre select ça va me faire style 10 ou 20 paramètres, auxquels il faut que j'ajoute le type, ... déjà qu'en temps normal c'est illisible, alors si je rajoute ça... En même temps ça fait un peu bricolage de passer des trucs en dur et d'autres en paramètres de statement...

 

Avis ?

 

Prepared statement. Le jour où ta méthode de récupération de $user_id ou $macle change ou si elle se révèle finalement vulnérable t'auras l'air malin avec tes trucs en dur à changer partout...


Message édité par skeye le 03-02-2019 à 15:03:51

---------------
Can't buy what I want because it's free -
n°2328615
depart
Posté le 03-02-2019 à 15:31:40  profilanswer
 

du coup des conseils particulier, on est obligé de se taper la ligne à la con avec  

$stmt->bind_param("sssssssssi", $macle, $macle, $macle, ... $d_debut, $d_fin, $user_id);

?
J'arrive pas à comprendre que quelqu'un ait pu pondre un truc aussi illisible que de concaténer en une chaîne les types de paramètres.
Vous rajoutez une couche d'abstraction pour passer par exemple un tableau type/paramètre et que ça génère la fonction bind_param() tout seul ?
 
Il y a aussi un truc qui m'irrite un peu, parfois j'ai des parties de requêtes conditionnelles,  
genre si une case est cochée dans un formulaire de recherche alors ça ajoute carrément un bout de requête sql complet.
ex :

$bout_de_requete = '' ;
if(isset($_POST['macheckbox'])) {
 $bout_de_requete = "AND machin = '".$contenu_champ_texte_associe_a_la_checkbox."'' ;
}


et dans la query, j'ai

$query = "SELECT....
WHERE a = 'b'
".$bout_de_requete."
AND x = 'y'  
ORDER ... ";


 
Ca dépend de la complexite, là j'aurai aussi pu faire un  

$query = "SELECT..." ;
if(isset($_POST['macheckbox'])) {
 $query .= "AND machin = '".$contenu_champ_texte_associe_a_la_checkbox."'" ;
}
$query .="AND x = 'y'  
ORDER ... ";


 
Je ne vois pas trop comment passer ça en prepared statement sans doublonner la requête et la liste totalement.


Message édité par depart le 03-02-2019 à 15:35:56
n°2328616
Ydalb
In Crêpes n' Cidre I Trust!
Posté le 03-02-2019 à 15:48:57  profilanswer
 

Tu peux utiliser des paramètres nommés pour préparer ta requête, et peut-être mettre tes conditions dans un tableau que tu concatènes à la fin.
 

Code :
  1. $and = [
  2.    "x = :param_x"
  3. ];
  4.  
  5. $params = [
  6.    ":param_x" => "y"
  7. ];
  8.  
  9. if(isset($_POST['macheckbox'])) {
  10.    $and[] = "machin = :param_machin";
  11.    $params[":param_machin"] = $contenu_champ_texte_associe_a_la_checkbox;
  12. }
  13.  
  14. $query = "SELECT * FROM table WHERE " . join(" AND ", $and) . " ORDER BY foo ASC";
  15.  
  16. $stmt = $db->prepare($query);
  17. $stmt->execute($params);


---------------
:o
n°2328617
Ydalb
In Crêpes n' Cidre I Trust!
Posté le 03-02-2019 à 15:51:24  profilanswer
 

depart a écrit :

Autre question, cette fois sur les "prepared statements" pour les requêtes SQL.
 
Vous "préparez" toutes les variables, même celles dont vous êtes sûrs ou seulement celles qui proviennent de l'extérieur ?


 
Toutes :jap:
 
Je ne vois pas l'intérêt de mixer les deux usages, d'autant que l'un est à proscrire (cf la réponse de skeye)


---------------
:o
n°2328618
skeye
Posté le 03-02-2019 à 16:21:22  profilanswer
 

variables nommées, oui, et ça devient tout de suite largement lisible.


---------------
Can't buy what I want because it's free -
n°2328621
depart
Posté le 03-02-2019 à 17:01:43  profilanswer
 

ha les paramètres nommés, visiblement c'est un truc spécifique à PDO, je passe par mysqli :(

n°2328628
ratibus
Posté le 03-02-2019 à 21:14:13  profilanswer
 

Tu peux utiliser un query builder pour abstraire tout ça.

n°2328687
depart
Posté le 04-02-2019 à 14:58:03  profilanswer
 

ratibus a écrit :

Tu peux utiliser un query builder pour abstraire tout ça.


Des suggestions ? (recommandé par l'expérience de l'usage hein, pas juste des noms).
 
J'ai toujours une certaine apréhension vis à vis de ce genre de chose.
Je me traine par exemple dans pas mal de mes projets 2 outils un peu pénibles :
- une vieille couche d'abstraction d'accès à la bdd issue de... phpBB des années 2000. Il manquait plein de trucs, c'était plus mis à jour (ça a trop changé pour être compatible)...
- un vieux smarty 2, plus trop mis à jour, un miracle que ça fonctionne encore sur php 7.2 par exemple
 
La couche d'abstraction à la base de données par exemple elle fait beaucoup de passe plat sans grand intérêt, elle permet certes une bascule plus facile d'un système à l'autre mais n'améliore pas la facilité d'utilisation. Par contre une fois utilisée, tu deviens dépendant de cette couche, là par exemple pour switcher sur pdo (non prévu dans la librairie) ça veut dire soit dégager la couche d'abstraction et tout réécrire, soit créer un nouveau type de base pour la couche d'abstraction à la main (vla le boulot) et malgré tout se taper une bonne dose de réécriture du code de l'application car par exemple rien n'est pris en compte pour les "named parameters".
 
Smarty, marrant au début, ça impose un peu de rigueur de séparation de code, mais devenir dépendant d'une couche supplémentaire alors qu'on pourrait le faire nativement d'une manière très proche directement en php c'est pas forcément si futé que ça.

n°2328703
ratibus
Posté le 04-02-2019 à 18:08:37  profilanswer
 

depart a écrit :


Des suggestions ? (recommandé par l'expérience de l'usage hein, pas juste des noms).
 
J'ai toujours une certaine apréhension vis à vis de ce genre de chose.
Je me traine par exemple dans pas mal de mes projets 2 outils un peu pénibles :
- une vieille couche d'abstraction d'accès à la bdd issue de... phpBB des années 2000. Il manquait plein de trucs, c'était plus mis à jour (ça a trop changé pour être compatible)...
- un vieux smarty 2, plus trop mis à jour, un miracle que ça fonctionne encore sur php 7.2 par exemple
 
La couche d'abstraction à la base de données par exemple elle fait beaucoup de passe plat sans grand intérêt, elle permet certes une bascule plus facile d'un système à l'autre mais n'améliore pas la facilité d'utilisation. Par contre une fois utilisée, tu deviens dépendant de cette couche, là par exemple pour switcher sur pdo (non prévu dans la librairie) ça veut dire soit dégager la couche d'abstraction et tout réécrire, soit créer un nouveau type de base pour la couche d'abstraction à la main (vla le boulot) et malgré tout se taper une bonne dose de réécriture du code de l'application car par exemple rien n'est pris en compte pour les "named parameters".
 
Smarty, marrant au début, ça impose un peu de rigueur de séparation de code, mais devenir dépendant d'une couche supplémentaire alors qu'on pourrait le faire nativement d'une manière très proche directement en php c'est pas forcément si futé que ça.


Tu bosses avec quel SGBD ?

n°2328706
depart
Posté le 04-02-2019 à 18:14:47  profilanswer
 
n°2328707
ratibus
Posté le 04-02-2019 à 18:18:33  profilanswer
 


La référence actuelle c'est Doctrine DBAL : https://www.doctrine-project.org/projects/dbal.html

n°2329123
depart
Posté le 14-02-2019 à 10:16:35  profilanswer
 

Je poursuis mes recherches sur l'aspect sécurisation des saisies/stockage bdd/réaffichage.
 
En fait le net pullule de morceaux de tutos ou de conseils généraux*, mais j'ai du mal à mettre la main sur un ensemble de code cohérent qui gère le processus global.
 
Mes questions en suspens :
1/ la meilleure manière de gérer les "input text" généraux (type nom, prénom, adresse postale...) à la saisie : en gros on filtre comment (regex ?) OU alors aucune vérification vu que c'est fait automatiquement par les prepared statements de la bdd ? Genre avant de faire un insert en bdd on fait une étape isset($_POST['nom']) ? un is_numeric($_POST['montant_euros_ht']) ou tout autre type de is_valid() ou ce genre de chose ?  
2/ idem pour des inputs pouvant contenir du html (champ libre avec un tinymce ou équivalent) ???
3/ en cas de non conformité on rejette comment ? un die("allez vous faire..." ) barbare ? parce que comme on a filtré en JS en amont, si on tombe sur l'erreur en php c'est très probablement une tentative de hack donc on s'en fout de faire un joli message d'erreur ; ou alors à l'opposé on se fait des try/catch ou que sais-je ? comment retourner proprement l'erreur, ne pas risquer d’exécuter du code "suivant" en cas de saisie incorrecte en amont ?  
4/ insertion en BDD je commence à voir (on en a parlé pas mal plus haut)
5/ réaffichage html de ces données (stockées en bdd) : un des 2 tutos plus bas évoque le fait qu'il faut systématiquement échapper tout ce qui vient de la bdd sur le principe du "si la bdd est hackée, on peut ajouter n'importe quoi dedans et donc c'est des données potentiellement dangereuses (code php, javascript...)" donc en gros tout echo $row['nom'] devrait devenir un echo htmlentities($row['nom']). Vous faites vraiment ça ? Si oui vous le faites pour chaque affichage (au plus près du html, via echo) ou en amont lorsque vous récupérez les données de la bdd et stockez les données "échappées" dans un tableau en attendant leur utilisation (via moteur de template par ex) ?
 
 
* 2 url sympa :
https://paragonie.com/blog/2017/12/ [...] p-software -> bon guide sur la sécurisation
https://phptherightway.com/#code_style_guide -> guide complet sur pas mal de bonnes pratiques php


Message édité par depart le 14-02-2019 à 10:58:49
n°2331456
depart
Posté le 05-04-2019 à 10:28:41  profilanswer
 

up
 
j'ai poursuivi mes recherches sans jamais vraiment avoir de conseils clairs.
Tout le monde dit "c'est idiot de tenter de filtrer avant l'insertion en bdd", c'est le rôle des prepared statement et compagnie, mais je trouve que si oui ça protège de l'injection SQL, ça ne protège pas de problèmes d'insertion du type "valeur saisie trop longue" (ex : champ prénom varchar(255) en bdd -> quelqu'un saisait 500 caractères... ben ça va faire planter la requête SQL. Même chose pour les champs numériques non integer, gérés en tant que "string" par PDO. Donc si quelqu'un saisit "toto" là où un décimal est attendu, ça va aller direct en bdd et péter la requête.
Bref, vous faite quoi vous ?

n°2331460
flo850
moi je
Posté le 05-04-2019 à 13:18:53  profilanswer
 

et bien tu regardes si la requetes s'est bien passée. Quel que soient les contrôles que tu fais ça pourra péter au niveau du serveur de base de données ( disque plein , coupure réseau, mise à jour de la base en cours, ...)-


---------------

n°2331462
MaybeEijOr​Not
but someone at least
Posté le 05-04-2019 à 13:55:53  profilanswer
 

Je ne suis pas pro, et je suis partisan du filtrage en amont, ce qui n'empêche pas de vérifier le statut de la requête.

 

Après statistiquement parlant, tu vas en quelque sorte double check toutes tes données alors qu'une infime partie ne seront pas bonnes, tu vas donc économiser le coût de quelques requêtes erronées. Mieux vaut donc faire un simple check au niveau de la requête afin d'économiser un check et de payer dans de rares cas le coût des requêtes erronées.
Sachant que tu pars du fait que les données sont déjà vérifiées en amont par JS, et que si ce n'est pas le cas, l'utilisateur sait ce qu'il fait.


Message édité par MaybeEijOrNot le 05-04-2019 à 13:56:31

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2331468
mechkurt
Posté le 05-04-2019 à 14:54:55  profilanswer
 

Le mec qui met 500 caractère au lieu de 255 dans le champs "nom" ça me fait un peu penser à Zezette épouse X.
 
Ta requête ne vas pas planter (encore je suppose que ça doit dépendre des BDD), sur Mysql en tout cas elle vas juste être couper pour ne garder que les 255 premiers.
Du coups la solution de prévenir en JS en amont que le champs ne doit pas excéder 255 caractère me semble aussi la meilleur...


Message édité par mechkurt le 05-04-2019 à 15:23:57

---------------
D3
n°2331471
MaybeEijOr​Not
but someone at least
Posté le 05-04-2019 à 15:15:08  profilanswer
 

Après, à voir si le script peut être utilisé de manière ouverte, par exemple tu proposes à des utilisateurs de pouvoir raccorder leur appli à ton script, dans ce cas là mieux vaut inclure une vérification dans le script avant d'effectuer les requêtes.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2331481
bixibu
Ca ... c'est fait!
Posté le 05-04-2019 à 16:04:56  profilanswer
 

Ca réonds pas vraiment à la question, mais c'est lié : pour des APIs, je laisse ce boulot à une couche de validation des I/O à base par exemple de JSON Schema qui va valider (ou pas) chaque objets/propriétés en fonction du schéma defini.

n°2331510
depart
Posté le 05-04-2019 à 20:45:12  profilanswer
 

Merci des retours.
En fait sur un champ "'nom" par exemple on pourrait facilement rejeter un paquet de caractères histoire de s'éviter de stocker <script>alert("toto" )</script> (ou plus méchant) en bdd (ce qui est une chaine parfaitement valide d'un point de vue sgbd/injection sql.
Certes je suis censé l'échapper systématiquement si je l'affiche, mais c'est quand même un peu risqué non ?
 
On peut aussi se poser la question : si ce que je demande à saisir est dans un formulaire html (une page web quoi), ne suis-je pas censé stocker les données saisies au format html, c'est-à-dire en encodant les caractères avec leurs valeurs html (genre "<" devient &lt; en base de données) ?


Message édité par depart le 06-04-2019 à 06:48:04
n°2331549
flo850
moi je
Posté le 06-04-2019 à 21:11:13  profilanswer
 

1/ nom, si tu l'échappes correctement, tu ne prends pas de risque  
 
2/ non, car si tu utilises les données pour un autre usage, tu vas devoir repartir à la peche aux entités html pour refaire la mécanique inverse ( par exemple un publipostage, un mail en text)


---------------

n°2331594
depart
Posté le 09-04-2019 à 10:00:43  profilanswer
 

Donc de votre côté vous passez directement les var du type $_POST['nom'], $_POST['adresse'], $_POST['commentaire'], ... aux "prepared statements" d'une requête SQL ?

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  64  65  66  67  68  69

Aller à :
Ajouter une réponse
 

Sujets relatifs
Problème pour une mise en page sous forme de tableauAfficher sur une page web directement le resultat d'une autre page web
[PHP] Fonction include plus rapide qu'un bout de code dans la page ?Ouvrir un fichier HTML en fin de page
[Résolu] Expirer la cache au niveau de la pageexecuter une page php sans rien afficher
inserer dans ma page wikiControler le changement de page
Certificat SSL a valider pour chaque élément de pageinstallé un mdp sur une page web avec Namo
Plus de sujets relatifs à : blabla@php | faq et bonnes pratiques page 1


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)