[RESOLU] register_globals OFF

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] register_globals OFF

Re: register_globals OFF

par moogli » 25 mai 2013, 15:37

de rien, bon courage


@+

Modération :
Puisque ta question est résolue, je l'indique en cliquant sur le bouton "Mettre le sujet en tant que Résolu" pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.

Tu peux réaliser cette opération toi-même en cliquant sur le bouton vert situé en haut de la page à côté du titre, si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)

Re: register_globals OFF

par marih » 25 mai 2013, 11:23

Grand merci pour tout.
Je m'attelle aux modifs !
marih

Re: register_globals OFF

par moogli » 25 mai 2013, 11:00

pour l'extension cela dépend de la configuration du serveur.

généralement c'est .php, mais effectivement .php3 étant pas mal utilisé "à l'époque de php 3" c'est à dire il y a plusde 10 ans :mrgreen:


en fonction de ce que propose ton hébergeur il faut te caler dessus.


@+

Re: register_globals OFF

par marih » 25 mai 2013, 10:46

OK vu !
Oui tu as raison mes bases n'ont aucun secret à préserver et je ne vais pas non plus me lancer dans des modifs qui risquent de me dépasser rapidement...

Je me permets une dernière question.

J'ai pas mal de programmes avec l'extension ".php3". C'est une bêtise de plus je pense, MAIS dois-je tout remettre en extension". php" ou bien (ce que j'espère, car sinon j'ai un sacré boulot de modifs à faire...) PHP passe outre ?

Encore merci pour tous les conseils que tu m'as prodigués.
marih

Re: register_globals OFF

par moogli » 24 mai 2013, 23:59

Q1 : c'est préférable de le faire au niveau serveur.
Je n'ai pas pas testé mais le php.ini par répertoire doit être suffisant si l'ancêtre en à un. Mais il faut tester avant toutes chose :)

Q2 : oui par exemple.

Pour le MD5 c'est plus ou moins un faut problème.

Le MD5 est un algorithme de hachage, cette opération est irréversible (contrairement à un encodage qui lui l'est).
Mais avec la puissance des machines actuelles il existe maintenant des bases de données contenant les mots et le md5 associé. On appel cela un dictionnaire.

Le but premier de ces hash c'est que personne, pas même le web master, puisse voir le mot de passe en claire dans la base ou sur le réseau.

suivant l'importance de ton site un md5 plus la technique du grain de sel peux amplement suffire (le grain de sel c'est simplement une chaîne que tu ajoute au début ou a la du mot de passe avant l'utilisation du md5. pour faire bien certain utilise des grain de sel aléatoire).

tu peux aussi regarder la fonction hash qui te proposera d'autre algo similaire (sha1, sha512 etc).

sache simplement qu'il faut faut faire la part des choses et qu'il y a de grandes chances pour que tu n'héberge pas des données secret defense donc pas la peine d'utiliser une technique trop sophistiqué où tu risque de te mélanger les pinceaux :)

@+

Re: register_globals OFF

par marih » 24 mai 2013, 17:42

Bonjour à tous,
Grand merci pour ces explications très détaillées qui permettent d'entrevoir la problématique des failles de mes programmes.

Je vais m'attacher à réécrire plus proprement mon code, conscient qu'il doit y avoir d'autres failles...hélas !

Je découvre dans vos exemples le "md5". Donc j'ai regardé dans la doc et j'ai vu qu'il n'est pas recommandé. Qu'en pensez-vous ?

Question 1: le php.ini est-il suffisant à la racine du site ou faut-il l'inclure dans toutes les sous directories ?
Question 2: Qd vous parlez d' "échapper" s'agit-il de ou des commandes comme "mysqli_real_escape_string " ?

merci de vos conseils

Re: register_globals OFF

par ghost5922 » 24 mai 2013, 12:40

Bonjour,

Merci Moogli pour les explications je comprends mieux l’utilité de cette option maintenant par chance (on va dire cela ) j'ai toujours utilise dans mes codes directement les sessions ou cookie au besoin

Bonne chance a toi marih

Re: register_globals OFF

par moogli » 24 mai 2013, 11:53

comme je l'indique, coder pour register globals = OFF c'est rattraper plus de 10 ans de non évolution du code.

De plus ce paramètre est supprimé depuis la version 5.4 et c’est un paris sur l'avenir car les hébergeurs y viennent et en dehors d'avoir un serveur perso tu n'auras pas le choix ;)

Je sais que c'est galère et que tu va y passer du temps, rien que pour savoir d'où provient une variable (c'est du vécu) mais à ce prix ton code sera au moins lisible et précis.

Ensuite pour le coté sécurisation, il faut que tu comprenne bien ce que fait le register globals = on

Avec ce paramètre toutes les variables issue de formulaire ($_GET ou POST), de l'url ($_GET), de cookie ($_COOKIE), session ($_SESSION), serveur ($_SERVER) etc sont déclarées directement dans le code.

donc une valeur passer dans l'url, disons http://tonsiteatoi.com?login=412
va donner dans le code une variable $login(qui aura pour valeur 412).

Maintenant imagine que tu ai une variable de session qui s'appel truc.
à la version ante diluvienne tu aurais ce code
<?php
session_start();
session_register('login');
$login= 412;
?>
ce qui correspond, en utilisant les supers globales à
<?php
session_start();
$_SESSION['login'] = 412
?>
donc si l'on arrive sur une page qui vérifie qu'un membre est connecté tu as un code qui peux ressembler à ça
<?php
session_start();
if(!$login) { // on est d'accord à ne pas faire il faut utiliser isset ou empty, mais c'est malheureusement souvent le cas .... 
    echo 'faut  être connecté oust, du balai';
}
else {
    echo 'coucou le membre : '.$login;
}
?>
donc avec ce code et les lignes du dessus tu te rend compte que le mec qui est connecté va afficher ce qu'il y a dans le else, mais aussi le mec qui met dans l'url ?login=xxx.

Maintenant imagine sur un forum comme ici, et que login correspond à l'id de l'utilisateur dans la table sql qui va bien. Tu affiche le profile d'un membre, de préférence un administrateur, tu affiche les pages d'administration juste en mettant ?login=l'id de l'admin.

==> tu a créé une faille de sécurité.

Autre chose, la collision des variables.

si tu as oublié que tu a une variable de session email et que dans un formulaire de contact (par exemple) tu demande d'entrer un email, dans un champs texte qui s'appel email. A la validation comment peux tu être certain de ce que va contenir $email ?
pour cela il y a un paramètre variable_order qui indique l'ordre de création des variables et donc d'écréasement puisse qu'elle auront le même nom.
Par défaut c'est EGPCS pour (ENV ,GET, POST, COOKIE et SERVER). L'ordre est important car il s'agit de l'ordre dans lequel les variables seront créer.
du coup si tu as une variable en get elle sera écrasée par une du même nom en post, qui peux être écrasée par une du même nom en cookie etc .
au final du n'aura surement pas la valeur que tu souhaite.

Ensuite les problème de ce genre peuvent aussi être du à d'autre chose comme un formulaire d'upload qui laisse passer n'importe quoi, un formulaire de connexion qui ne controle pas les données et n'échappe aucune valeur du coup tu crée une faille de type injection SQL (cf google).

Donc au final récupère ton code sur ta machine, configure php pour register globals = PHP (si php < 5.4 sinon c'est pas défaut) et corrige ton code.


bon courage.

@+

Re: register_globals OFF

par ghost5922 » 24 mai 2013, 11:04

Bonjour,

pour un accès a un espace membre vos mieux éviter le $_GET :)

test sur une page a cote de ton site ce code normalement la premier fois le array sera vide mais au prochain il devrai avoir tes infos
<?php
session_start();

print_r($_SESSION);

if(isset($_POST)){
   $login=$_POST['login'];
   $password=md5($_POST['password']);
    

  $_SESSION['user']=array("login"=>$login,"password"=>$password);

}
?>
<form action="" method="POST">
<input type="text" name="login" />
<input type="password" name="password" />
<input type="submit" value="go" />
</form>

Re: register_globals OFF

par lalmat » 24 mai 2013, 10:57

Pour répondre au 1er post,

Il faut utiliser $_GET et non $_POST lorsque tu passes tes variables via l'URL.

L'utilisation du $_POST est soit suite à l'envoi d'un formulaire avec l'attribut method="POST" soit via un envoi AJAX en POST.

EDIT : Je te suggère de bien nettoyer les variables récupérées avant de les utiliser. Pour celà, assure toi du type que tu attends. Les fonctions is_string ou is_numeric peuvent éviter bien des ennuis. Ensuite, pense à bien protéger les chaines avec la fonction quote de PDO, ou à les escaper si tu lances des scripts et enfin mets toi à jour avec PHP5.

Bonne continuation.

Re: register_globals OFF

par marih » 24 mai 2013, 08:22

Merci pour tout.
Je n'avais pas compris que Moogli conseillait aussi register_globals OFF.
On est donc d'accord.

Pour l'utilisation des sessions je dois faire une erreur je vais vérifier avec ton dernier exemple.
merci

Re: register_globals OFF

par ghost5922 » 23 mai 2013, 19:57

Re,

comme le dit moogli ( je me repete mais je connais pas cette option ) meme avec l'option register_globals OFF les sessions sont disponible

donc par exemple pour un compte user

on a un formulaire avec les inputs login,password,etc

puis on a une page pour verifier les informations avec la bdd si les informations sont correcte alors on mets les variables post en session

$login=$_POST['login'];
$password=md5($_POST['password']);
$_SESSION['login'] = array($login,$password);

Re: register_globals OFF

par marih » 23 mai 2013, 18:15

Tout d'abord merci à Moogli et ghost5922 de m'avoir répondu.
Je suis un modeste selfmade webmaster bien qu'ancien informaticien et je ne sais plus à quel "saint me vouer" !
Comme je l'ai dit ci-dessus mon site vient d'être détruit à 80% (tous les fichiers html) et un 2ème niveau de mon hébergeur US (assez gros) me conseille fortement d'utiliser "register_glogals Off" pour augmenter la sécurité du site.
Par ailleurs cette info semble confirmée par les recommandations du manuel PHP à: http://php.net/manual/fr/security.globals.php.

Question travail à accomplir je préfèrerai rester avec "register_glogals On" car dans ce cas je n'aurai rien à changer, MAIS je reste inquiet car le salaud qui m'a "dézingué" peut recommencer qd il veut ... ! vous voyez ce que je veux dire ?

Alors que me conseillez-vous question "sécurité améliorée" ?

merci encore de votre aide avant que je ne me lance dans des jours de modifs !

Re: register_globals OFF

par ghost5922 » 23 mai 2013, 16:18

Re,

désolé moogli je connais pas cette option si je lui ai dis de la réactivé c'est que plus haut je lui ai donne un code session elle a répondu

En utilisant register_globals Off les variables de SESSION ne sont plus accessibles.

donc si cette option et a off on peux quand même faire des sessions ?

Re: register_globals OFF

par moogli » 23 mai 2013, 16:01

Il y a un tuto la dessus faq-tutoriels/pourquoi-register-globals ... f-t48.html

Ne pas mettre register globals à ON car :
1/ C'est une anerie, comme expliqué dans le tuto
2/ Ce paramètre est supprimé avec php 5.4 donc ce n'est pas un pari sur l'avenir => http://fr2.php.net/ChangeLog-5.php#5.4.0 (un an de retard)
3/ C'est rattraper 11 ans de non évolution du code ! => http://fr2.php.net/ChangeLog-4.php#4.2.0


Pour répondre à marih c'est dans les tutos de base ;)

http://phpdebutant.org/article69.php
http://www.lephpfacile.com/cours/18-les-sessions

Même s'il date un peu ils sont d'actuallité ;)


@+