intval() , mysql_real_escape_string()...

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 : intval() , mysql_real_escape_string()...

Re: intval() , mysql_real_escape_string()...

par stopher » 11 sept. 2009, 21:00

Normalement ,
tu ne peux pas modifier les donnés de ta session toi même !

Le risque est donc minime .
Cependant , tout filtrer te permet d'être certain du résultat .

Filtrer certaines données , et pas d'autres , peut conduire à des oublis .. donc des failles majeurs !

Ne fais donc confiance à personne , ni aux sessions !

Re: intval() , mysql_real_escape_string()...

par Dr@ke » 11 sept. 2009, 20:56

//si 
$_POST['numero1'] = '@@';
//quel effet sur:
intval($_POST['numero1']);
//Ou plus simplement sur un: 
echo intval($_POST['numero1']);
[EDIT]
Ajout du code Php -> c'est plus clair

Re: intval() , mysql_real_escape_string()...

par Nathou » 11 sept. 2009, 19:50

Merci pour vos réponses, même si elles ne répondent pas clairement à la question que je me pose, pourquoi protéger des variable ($exemple) dont la valeur est calculée ou donnée en interne, je veux dire par la que même si le résultat de cette variable dépend d'un $_POST ou $_GET par exemple, le $_POST ou $_GET sera 'sécurisé'

En gros il me semble vachement intéressant de savoir si il est possible, pour le visiteur de modifier ces variables ($exemple) sans passer par des $_POST ou $_GET
Pour les sessions , peut importe au finale ce qu'il y a dedans , sauf si tu enregistres tes sessions en base !
Donc, en prenant un exemple :
- l'utilisateur à l'aide d'un formulaire donne le contenu de
$_POST['nombre']
- je met en session et sécurise
$_SESSION['nombre'] = intval($_POST['nombre']);
- dans une autre page je fais appel au contenu enregistré dans la session pour le mettre dans une bdd
$num1 = intval($_POST['numero1']);
$num2 = intval($_POST['numero2']);
$exemple = 1;
$blabla = "exemple";
$test = $num1 + $num2;
mysql_query("UPDATE `matable` SET `monchamp` = '". $_SESSION['nombre'] ."', `blabla` = '". $blabla ."', `test` = '". $test."' WHERE `blabla` = "' . $exemple . '"");
Selon vous je prend un risque en ne sécurisant pas la variable $blabla, $test et la $_SESSION? Si oui pourriez vous m'expliquer pourquoi?

Je sais c'est pas très très clair :mrgreen:

Re: intval() , mysql_real_escape_string()...

par stopher » 10 sept. 2009, 21:00

Il est bon ( enfin je le pense ) , de maitriser ses données entrantes , comme sortantes !

Il est donc effectivement fortement conseiller d'échapper au minimum les données que l'utilisateur peut fournir , et aussi de supprimer/stériliser tout code possible !

Car imagines que tu échappes tes données entrantes , avant l'insertion en base .. ok , l'injection sql est mise de coté , cependant , l'injection de code non ! , si tu affiche les données enregistrées dans ta base , et que celles-ci contiennent de code js par exemple , ce code sera interprété ( faille XSS possible ).

Utilise donc par exemple , htmlentities() , strip_tags() , en plus de mysql_real_escape_string() .

Ensuite , pour ce qui est des données de fonctionnement interne , j'aime aussi être certain d'avoir un type que j'attends ! dans le cas contraire => exception ! mais là c'est plus pour avoir un résultat toujours parfait ( dans le meilleurs des mondes ) , et eviter les bugs

Pour les sessions , peut importe au finale ce qu'il y a dedans , sauf si tu enregistres tes sessions en base !

Re: intval() , mysql_real_escape_string()...

par Dr@ke » 10 sept. 2009, 19:38

Mon avis est qu'il faut protéger toutes les variables $_POST, $_GET et les insertions dans ta base de donnée.
Les fonctions preg_match et preg_replace sont ultra efficaces surtout quand tu peux spécifier grâce aux Regex une seule et même syntaxe (donc taille mini et max comprises...).
Elles le sont beaucoup moins quand tu interdits juste des caractères et/ou syntaxes spécifiques...
Pour les insertions dans une base de donnée, j'utilise avant tout: mysql_real_escape_string() qui me parait indispensable le plus souvent...
Pour le reste, les fonctions qui peuvent être aussi pratiques:
is_numeric(), is_null(), empty()...

[EDIT]
Ah j'oubliais le minimum: l'indispendable isset()

intval() , mysql_real_escape_string()...

par Nathou » 10 sept. 2009, 19:15

Bonsoir,

J'aurais une question concernant ces fonctions,

Prenons un exemple :
// $_POST['blabla'] doit normalement contenir une valeur numérique
$variable = intval($_POST['blabla']);

$test = rand(1,5);
$variable = $test;
J'aimerais savoir si il fallait protéger uniquement les données $_POST / $_GET ou autre modifiable par le visiteur, ou si il fallait protéger aussi les variables présentent dans le code php et que l'utilisateur ne peut pas directement modifié (d'ailleurs est-il possible de les modifier?)

De même faut-il protéger des $_SESSION?

Et dans ce cas :
if ( $_POST['blabla'] == 3 ) {
}
Faut il aussi protéger la variable $_POST ?