8796 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai pris connaissance de l'ouvrage que vous recommandez sur la sécurité (2nde édition)et compte me le procurer sous peu.

Néanmoins, je débute sur l'apprentissage des sessions sur un petit site qui contient en plus un espace d'indentification login + mot de passe pour un panier commande.

A ce jour, Je n'ai seulement implémenté dans le header le code suivant :

session_start();


complété d'un traitement php de deconnexion.

Ceci fait : dès que l'internaute visite (sans nécesairement etre "logué") l'index du site puis une seconde rubrique, le n° aléatoire de session apparait dans l'url.

J'ai parcouru différents articles qui m'ont alerté sur ce sujet et donc à souhaiter améliorer la sécurité sur cet affichage de n° de session .

Ma question est la suivante : quelles sont les premières actions /ou écriture de code , afin que ce n° aléatoire n'apparaisse pas déjà dans l'url ?

Je précise que je n'ai pas crée de répertoire appelé sessions, ni configuré quoi que ce soit dans le ht.acess.

Merci à l'avance de vos conseils ou directions qui puissent m'aider.
Cordialement,
Bouzette
Hello,

Si l'ID de session figure dans les urls, c'est généralement parce que les sessions par cookie ne sont pas activées.

Un élément de solution :
ini_set( 'session.use_cookies', ( int )1 );
ini_set( 'session.use_trans_sid', ( int )1 );
session_start();
J'ai déjà utilisé ça "un certain nombre de fois" sans souci.
En espérant que ça t'aide Smiley cligne

PS : le htaccess ne t'aiderait pas trop dans ce cas.
Modifié par Ladytron (09 Apr 2010 - 18:17)
Bonjour,

Merci pour ce conseil.
Cela fonctionne malgré tout si l'internaute a désactivé les cookies ?
Ladytron a écrit :
PS : le htaccess ne t'aiderait pas trop dans ce cas.


Sauf sur certain mutualisé comme ovh où justement la même chose est réalisable via la directive:

SetEnv SESSION_USE_TRANS_SID 0
bouzette a écrit :
Bonjour,

Merci pour ce conseil.
Cela fonctionne malgré tout si l'internaute a désactivé les cookies ?
Si l'internaute désactive les cookies sur son ordinateur, ça ne fonctionnera pas.
A moins de trouver une parade pour détecter si l'utilisateur a activé les cookies, auquel cas on utiliserait l'astuce citée plus haut Smiley smile
Benjamin-Ds a écrit :
Sauf sur certain mutualisé comme ovh où justement la même chose est réalisable via la directive:SESSION_USE_TRANS_SID 0
Je savais pas, merci de l'info Smiley cligne
Le fonctionnement normal devrait en principe être le suivant : la transmission de variables de session en GET est fait automatiquement par php si le navigateur refuse et/ou désactive et/ou ne supporte pas les cookies, et uniquement dans ce cas. Dès lors que les cookies sont acceptés, pas de transmission en GET.

IL existe une option supplémentaire pour désactiver complètement la transmission en GET, que je trouve bon ton d'activer. La transmission d'id de session en GET ou POST étant bien plus vicieuse qu'on ne pourrait le croire au premier abord. De toute façon aujourd'hui, plus personne ne refuse les cookies dont la durée de vie n'excède pas une instance du navigateur. Même les scripts semi-automatiques genre CURL.

Je recommanderais donc la configuration suivantes :
session.use_cookies=on
session.use_only_cookies=on
session.use_trans_sid=0
A configurer dans le php.ini, par .htaccess avec les directives php_value ou php_flag, ou bien avec la fonction ini_set.

Quand je pense qu'un certain jeu de stratégie spatiale par navigateur très connu dont je ne citerai pas le nom transmet encore ses ID de session en GET, je m'offusque.... c'est hyper dangereux.
Bonsoir,
Ôtez moi un doute Ladytron et QuentinC. Ce que j'appelle une session par cookie est en fait un vrai cookie de durée brève (chez le visiteur). Y a t-il un rapport avec une vraie session brève (sur le serveur) ? l'url, en ce cas (si la session est sur serveur) est elle possiblement visible dans l'url ?

<édit : mal exprimé,
La session est elle indiquée dans l'url dans le cas d'une "vraie session" (pas cookie)
>
Modifié par Aureance (12 Apr 2010 - 23:30)
@Aureance: il n'y a pas de vraie session et de fausse session, il n'y a qu'un seul type de session. Les données relatives à la session (que tu mets dans $_SESSION en php) sont toujours stockées sur le serveur (le plus souvent dans un fichier texte dans le cas de php). Cookie, GET ou POST sont juste des moyens de transmettre le numéro de session. Rappelons à toutes fins utiles que le numéro de session n'est en fait rien d'autre qu'une simple variable qui doit être transmise de page en page (et qui s'appelle en principe phpsessid en php). Donc, c'est soit l'un, soit l'autre : s'il y a transmission par cookie, il n'y a rien en GET et réciproquement.

ON transmettait le numéro de session par GET ou par POST dans le temps où les navigateurs ne connaissaient pas les cookies. Aujourd'hui, à mon avis, ça ne se justifie plus. Plus personne à ma connaissance ne refuse les cookies non permanents qui meurent en même temps que la fenêtre du navigateur.
Modifié par QuentinC (13 Apr 2010 - 08:51)