cerhu > comp.lang.* > comp.lang.php

Lulu (02/03/2020, 21h31)
Bonjour,

J'ai un formulaire avec 4 inputs de type "zone de saisie" (destinées à
des valeurs numeriques entières), 3 inputs de type "radio" et 11 inputs
de type "checkbox".

Le formulaire est de méthode "post" et je récupère le contenu des inputs
par une série de ligne du type $WL_start = $_POST['WL_start']

Pour les zones de saisie, je traite cette saisie par :

<?php
// si ce test est positif, c'est que l'utilisateur a saisi une valeur et cliqué
// le bouton "Dessiner le spectre"
if ( isset( $WL_start ) ) {
// il faut donc remettre la valeur de Value_WL_start à la valeur que l'utilisateur
// a postée à condition qu'elle soit "attendue"
// en premier lieu : numérique
if ( is_numeric( $WL_start ) ) {
$x = floor( $WL_start );
// en deuxième lieu, entière
if ( $x != $WL_start ) {
$WL_start = 380;
} else {
// en troisème lieu, dans le domaine visible, sinon 380 nm
if ( ( $x < 380 ) or ( $x >= 800 ) ) {
$WL_start = 380;
}
}
// non numérique :
} else {
$WL_start = 380;
}
}
?>

Est-ce que ce code empêche qu'un script-kiddie puisse falsifier le
comportement que j'attends de ma page ?

Pour mes trois boutons radios, je n'ai que le test de la valeur de la
variable "name" de mon input :
<?php
if ( ! isset( $choix_spectre ) ) {
//echo "choix_spectre is NOT set, setting it to 2 <br />\n";
$choix_spectre = 2;
}

if ( $choix_spectre == 1 ) {
//echo " --> Spectre continu<br />\n";
$checked_1 = "checked";
$checked_2 = "";
$checked_3 = "";
} else {
if ( $choix_spectre == 2 ) {
//echo " --> Spectre d'émission<br />\n";
$checked_1 = "";
$checked_2 = "checked";
$checked_3 = "";
} else {
if ( $choix_spectre == 3 ) {
//echo " --> Spectre d'absorption<br />\n";
$checked_1 = "";
$checked_2 = "";
$checked_3 = "checked";
}
}
}

Et pour mes onze cases à cocher :
<?php
if ( !empty( $_POST['elements'] ) ) {
foreach( $_POST['elements'] as $val ) {
if ( $val == 'H') {
$La_string_elements = $La_string_elements.$val.",";
$checked_H = "checked";
}
if ( $val == 'He') {
$La_string_elements = $La_string_elements.$val.",";
$checked_He = "checked";
}
if ( $val == 'Li') {
$La_string_elements = $La_string_elements.$val.",";
$checked_Li = "checked";
}
if ( $val == 'Na') {
$La_string_elements = $La_string_elements.$val.",";
$checked_Na = "checked";
}
if ( $val == 'Mg') {
$La_string_elements = $La_string_elements.$val.",";
$checked_Mg = "checked";
if ( $val == 'Ar') {
$La_string_elements = $La_string_elements.$val.",";
$checked_Ar = "checked";
}
if ( $val == 'Ca') {
$La_string_elements = $La_string_elements.$val.",";
$checked_Ca = "checked";
}
if ( $val == 'Ti') {
$La_string_elements = $La_string_elements.$val.",";
$checked_Ti = "checked";
}
if ( $val == 'Mn') {
$La_string_elements = $La_string_elements.$val.",";
$checked_Mn = "checked";
}
if ( $val == 'Fe') {
$La_string_elements = $La_string_elements.$val.",";
$checked_Fe = "checked";
}
if ( $val == 'Hg') {
$La_string_elements = $La_string_elements.$val.",";
$checked_Hg = "checked";
}
}
// Retirer la dernière virgule de la liste
$La_string_elements = substr($La_string_elements, 0, -1);
}

Pour les boutons radios ou cases à cocher, y a-t-il des précautions
élémentaires à prendre pour éviter l'utilisateur malicieux ?

Ce formulaire n'est pas destiné à remplir une base de donnée, juste à
fabriquer une chaîne de caractères qui sert à appeler un script python
avec "passthru( $zeCommandLine )" pour fabriquer une image ensuite
afficher dans la page.

Merci de vos avis.
Olivier Miakinen (02/03/2020, 23h32)
Bonjour,

Le 02/03/2020 20:31, Lulu a écrit :
[..]
> }
> // non numérique :
> } else {
> $WL_start = 380;
> }
> }
> ?>
> Est-ce que ce code empêche qu'un script-kiddie puisse falsifier le
> comportement que j'attends de ma page ?


Ça me semble correct. En lisant ce code je ne vois pas comment on
pourrait se retrouver avec un $WL_start qui soit autre chose qu'un
entier entre 380 et 800.

[..]
> $checked_1 = "";
> $checked_2 = "checked";
> $checked_3 = "";
> } else {
> if ( $choix_spectre == 3 ) {
> //echo " --> Spectre d'absorption<br />\n";
> $checked_1 = "";
> $checked_2 = "";
> $checked_3 = "checked";
> }


Ici il manque un else, pour le cas où $choix_spectre vaudrait autre chose que 1,
2 ou 3. Mais...

> }
> }


.... Mais il y a plus simple comme écriture.

<?php
if ( ! isset( $choix_spectre ) ) {
//echo "choix_spectre is NOT set, setting it to 2 <br />\n";
$choix_spectre = 2;
}

switch ( $choix_spectre ) {
case 1:
//echo " --> Spectre continu<br />\n";
$checked_1 = "checked";
$checked_2 = "";
$checked_3 = "";
break;

case 3:
//echo " --> Spectre d'absorption<br />\n";
$checked_1 = "";
$checked_2 = "";
$checked_3 = "checked";
break;

default: // 2 ou toute autre valeur
$choix_spectre = 2; // au cas où ce n'était pas 2
//echo " --> Spectre d'émission<br />\n";
$checked_1 = "";
$checked_2 = "checked";
$checked_3 = "";
break;
}
?>

[..]
> $checked_Fe = "checked";
> }
> if ( $val == 'Hg') {
> $La_string_elements = $La_string_elements.$val.",";
> $checked_Hg = "checked";
> }
> }
> // Retirer la dernière virgule de la liste
> $La_string_elements = substr($La_string_elements, 0, -1);
> }


Là aussi tu pourrais utilise l'instruction switch, qui en PHP peut être
utilisée aussi bien sur des chaînes que sur des entiers.
[..]

> Pour les boutons radios ou cases à cocher, y a-t-il des précautions
> élémentaires à prendre pour éviter l'utilisateur malicieux ?


Ce que tu fais me semble correct. Tu testes une à une toutes les valeurs
que tu connais, et tu ne fais quelque chose que pour celles-là. Si un
utilisateur malicieux ajoute une valeur que tu n'as pas prévue, ton code
l'ignorera, et c'est bien.

> Ce formulaire n'est pas destiné à remplir une base de donnée, juste à
> fabriquer une chaîne de caractères qui sert à appeler un script python
> avec "passthru( $zeCommandLine )" pour fabriquer une image ensuite
> afficher dans la page.


Ok.
Lulu (03/03/2020, 01h17)
Le 02-03-2020, Olivier Miakinen <om+news>a écrit :
> Le 02/03/2020 20:31, Lulu a écrit :


> Ça me semble correct. En lisant ce code je ne vois pas comment on
> pourrait se retrouver avec un $WL_start qui soit autre chose qu'un
> entier entre 380 et 800.


0K

> Ici il manque un else, pour le cas où $choix_spectre vaudrait autre chose que 1,
> 2 ou 3. Mais...
>> ... Mais il y a plus simple comme écriture.


Ah oui...
Depuis que je me "pense" en python, j'oublie le swich case...

Merci pour le code ;-)
[..]
> $checked_3 = "";
> break;
> }
> ?>
> Là aussi tu pourrais utilise l'instruction switch, qui en PHP peut être
> utilisée aussi bien sur des chaînes que sur des entiers.
> [..]


0K, je vais lire cette page

>> Pour les boutons radios ou cases à cocher, y a-t-il des précautions
>> élémentaires à prendre pour éviter l'utilisateur malicieux ?

> Ce que tu fais me semble correct. Tu testes une à une toutes les valeurs
> que tu connais, et tu ne fais quelque chose que pour celles-là. Si un
> utilisateur malicieux ajoute une valeur que tu n'as pas prévue, ton code
> l'ignorera, et c'est bien.


0K

>> Ce formulaire n'est pas destiné à remplir une base de donnée, juste à
>> fabriquer une chaîne de caractères qui sert à appeler un script
>> python avec "passthru( $zeCommandLine )" pour fabriquer une image
>> ensuite afficher dans la page.

> Ok.


Merci pour tout
Lulu (03/03/2020, 02h16)
Le 02-03-2020, Lulu <lulu042>a écrit :
> Le 02-03-2020, Olivier Miakinen <om+news>a écrit :
>> Ah oui...

> Depuis que je me "pense" en python, j'oublie le swich case...
> Merci pour le code ;-)


Je viens de tester ce switch/case en supprimant le test sur isset qui
le précède : ça marche, c'est à dire que le cas "default" a l'air
d'englober le cas ou $choix_spectre n'a pas de valeur attribuée.

>> [...]
>>cLà aussi tu pourrais utilise l'instruction switch, qui en PHP peut être
>>cutilisée aussi bien sur des chaînes que sur des entiers.
>>chttps://www.php.net/manual/fr/control-structures.switch.php

> 0K, je vais lire cette page


Dans cette page, j'ai vu le commentaire (de lchanady at gmail dot com)
suivant:

Something fairly simple (and maybe obvious) that I didn't see mentioned
is that the default case WILL be executed even if the switched variable
does not exist or is undefined.

For example:

<?php

$a = "abc";
$b = "def";

switch($c){
case "a":
echo "a";
break;
case "b":
echo "b";
break;
default:
echo "default";
break;
}

?>

Will output: default

Even though $c was never declared or defined, the default case will
still be executed rather than PHP throwing an error.

Encore merci pour le rappel sur switch/case !
Olivier Miakinen (03/03/2020, 12h52)
Le 03/03/2020 01:16, Lulu a écrit :
> [...]
> Je viens de tester ce switch/case en supprimant le test sur isset qui
> le précède : ça marche, c'est à dire que le cas "default" a l'air
> d'englober le cas ou $choix_spectre n'a pas de valeur attribuée.


et :

> [...]
> Dans cette page, j'ai vu le commentaire (de lchanady at gmail dot com)
> suivant:
> is that the default case WILL be executed even if the switched variable
> does not exist or is undefined.
> [...]
> Even though $c was never declared or defined, the default case will
> still be executed rather than PHP throwing an error.


Tout ça me semble parfait.

> Encore merci pour le rappel sur switch/case !


Heureux d'avoir aidé.
Olivier Miakinen (03/03/2020, 12h55)
Le 03/03/2020 00:17, Lulu a écrit :
> [...]
> 0K
> [...]
> 0K, je vais lire cette page
> [...]
> 0K


C'est amusant. Pourquoi écris-tu 0K au lieu de OK ? Un jeu de mots avec le zéro
absolu des températures, zéro kelvin ?

>> [...]
>> Ok.


Là c'était moi.
Lulu (03/03/2020, 17h05)
Le 03-03-2020, Olivier Miakinen <om+news>a écrit :
> Le 03/03/2020 00:17, Lulu a écrit :
> C'est amusant. Pourquoi écris-tu 0K au lieu de OK ? Un jeu de mots avec le zéro
> absolu des températures, zéro kelvin ?


Quelle capacité d'observation !!

Parce que ça veut dire "zero killed" (enfin ça n'est qu'une des
nombreuses explications pour okay).
Olivier Miakinen (03/03/2020, 19h55)
Le 03/03/2020 16:05, Lulu a écrit :
>> C'est amusant. Pourquoi écris-tu 0K au lieu de OK ? Un jeu de mots avec le zéro
>> absolu des températures, zéro kelvin ?

> Quelle capacité d'observation !!


:-)

> Parce que ça veut dire "zero killed" (enfin ça n'est qu'une des
> nombreuses explications pour okay).


Ça ne fait pas partie des explications privilégiées, mais en effet c'en
est une : <https://fr.wikipedia.org/wiki/OK_%28expression%29>.

Merci de ta réponse.
Lulu (04/03/2020, 22h44)
Le 03-03-2020, Olivier Miakinen <om+news> a écrit :
> Le 03/03/2020 16:05, Lulu a écrit :
> :-)
> Ça ne fait pas partie des explications privilégiées, mais en effet
> c'en est une : <https://fr.wikipedia.org/wiki/OK_%28expression%29>.


J'ai relu avec plaisir cette page : le « Ola kala » grec me plait bien
aussi.

> Merci de ta réponse.


Je t'en prie. C'est toujours un plaisir de discuter avec toi.
Discussions similaires
securite, sql, formulaire

Securite de formulaire

[newbe] Sécurité des variables dans un formulaire

sécurité et formulaire


Fuseau horaire GMT +2. Il est actuellement 16h35. | Privacy Policy