Salut Pascaltje et les autres

merci pour cette piqure de rappel qui fait du bien
Neanmoins je me pose des questions sur la securité:
Quels fonctions dois-je executer a tout prix sur mes variables avant tout traitement SQL?
Code :
magic_quotes_gpc On On
magic_quotes_runtime Off Off
magic_quotes_sybase Off Off
Ceci concerne mes magic_quote. j'ai vu qu'il n'etait pas conseillé de faire un addslash lorsque les magic quote sont actifs...Votre avis?
Je pense faire un mysql_real_escape string. mais lorsque je recupere les données je rajoute des slashs?
Concernant mysql_real_escape_string:(Manuel mysql)
Code :
Note: Si magic_quotes_gpc est activée, appliquez d'abord la fonction stripslashes() à vos données. Utiliser cette fonction sur des données qui ont déjà été protégées, les protègera une deuxième fois.
Donc je ne sais plus a quoi obeir! Dois-je executer une fonction meme si les magic quotes sont activés?Dois-je faire un addslash et ensuite faire un stripslash lors de la recuperation, ou bien un mysql_real_escape_string?Ou bien les trois?
Voila...j'espere que cette question et vos reponses pourront aider d'autres personnes

Merci et a bientot!
Corentone
Désactiver les magic quotes et toujours travailler comme si elles étaient désactivées. Ainsi que faire une vérification de l'activité par défaut ou non des magic quotes. Fais une recherche sur le fofo, question déjà discutée

Merci Damen! C'est vrai que j'avais negligé la recherche cette fois desolé

, je voulais profiter de ce topic et j'espere que ce point sera plus abordé dans le tuto
D'apres ce que j'ai pu voir du topic:
Code PHP :
Code PHP :
if(get_magic_quotes_gpc())
{
$log = stripslashes($_POST['login']);
$pass = stripslashes($_POST['pass']);
}
else
{
$log = $_POST['login'];
$pass = $_POST['pass'];
}
$log = mysql_real_escape_string($log);
$pass = mysql_real_escape_string($pass);
$requete = "SELECT login, password, id, droitsAdmin FROM users WHERE login='".$log."' AND password='".$pass."'";
$exec_req = mysql_query($requete) or die ('erreur de connexion');
$row = mysql_fetch_row ($exec_req);
if ($row[0] == null )
{
$this->mauvaislog= "Votre login ou votre mot de passe sont incorrects.";
}
else
{
//connexion
}
Code source de Nessper (je précise...)
Donc l'ideal serait cela, avec un stripslashes lorsque je veux lire les données?
Merci de ton aide Damen.
Corentone
PS: je ne pense pas que desactiver les magic qotes soit possibles sur free.fr ou mon 1000gp ovh(mutualisé)...
Le plus simple pour désactiver les magic_quotes_gpc une bonne fois pour toute si jamais tu n'as pas accès au php.ini, c'est de placer ce bout de code dans le fichier qui est systématiquement inclus dans toutes tes pages avant toute autre exécution (on a toujours un «inc/common.php» pour cet usage) :
Code PHP :
if(get_magic_quotes_gpc()) {
foreach ($_GET as $i => $value) if (is_string($value)) $_GET[$i] = stripslashes($value);
foreach ($_POST as $i => $value) if (is_string($value)) $_POST[$i] = stripslashes($value);
foreach ($_COOKIE as $i => $value) if (is_string($value)) $_COOKIE[$i] = stripslashes($value);
}
Comme ça tu n'as plus à t'en préoccuper, par contre évidemment c'est dommage ces ressources perdues trois fois : une fois par l'option qui fait un addslashes, et une fois par le script qui fait des stripslashes, puis une troisième fois par le script qui refait un addslahes via mysql_real_escape_string(), mais on n'a hélas pas bien le choix.
Merci pour le tuyau naholyr

je vais le mettre dans mon code

On me dit dans l'oreillette que mon code était très mauvais tel quel puisqu'il risquait de transformer tous tes tableaux (genre dans les cookies) en un vilain "Array" peu explicite.
Il faut bien sûr vérifier qu'on a bien une chaine avant d'appliquer le stripslashes (code édité).
Voici le code que j'utilise, qui a l'avantage de traiter les tableaux récursivement :
Code PHP :
set_magic_quotes_runtime(FALSE);
if(get_magic_quotes_gpc()){
function remove_magic_quotes(&$var) {
if(is_array($var)){
array_walk($var, "remove_magic_quotes");
} else if (is_string($var)) {
$var=stripslashes($var);
}
}
remove_magic_quotes($_POST);
remove_magic_quotes($_GET);
remove_magic_quotes($_REQUEST);
remove_magic_quotes($_COOKIE);
}
Je l'ai honteusement repiquée à partir de commentaires dans la doc officielle php
Ca vient quand le chapitre 2 ?

tuto disponible au format wiki
C'est ici
NB: j'ai pas fait de modif, j'ai juste mis en forme donc hésitez pas à modifier corriger ...