PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#51 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

Bonsoir Jc,
Je te remercie d'avoir pris un peu te ton temps.

je viens de passer la journée à vouloir passer des infos du formulaire dans ma base, en vain.. je dois faire encore une erreur que je trouverais ..demain..

J'ai lu avec une grande attention tes posts, je dois t'avouer que pour petit niveau ça me semble très compliqué, je suis parti, comme tu le disais, d'un minimum syndical...mais ça progresse quand même pas mal.

Effectivement, chez l'hébergeur du site j'ai fini par activer le SSL après avoir tenté de passer par les htacess ( ça marchait pas), en fait il suffisait simplement, après activation SSL (environ 2h d'attente pour que ce soit actif), de gérer les liens en http ou https, j'ai donc positionnés mes liens https uniquement vers les 2 formulaires, les autres IHM restent en http.
Comme tu me l'indiques mes pages d'accueils publiques et privées restent donc en http simple.

Concernant mon application
, je l'héberge sur un serveur à mon domicile ( appli java en SAAS+postgresql ( mysql pas assez puissant), je bosse avec l'IDE Netbeans sous linux/Ubuntu serveur), je pensais ultérieurement faire un lien du site vers mon serveur via NoIp ( je suis en Ip dynamique). J'essaie de simplifier et ne pas mettre "tout mes oeufs dans le même panier" en sécurisant chaque entité site et appli individuellement, cela me semble moins compliqué, moins risqué et moins cher.
Comme tu l'as indiqué, il est vrai que je vais devoir aussi associer le site et mon serveur, chacun en https, mais ça va vite pour moi, je suis toujours qu'un hyper débutant..

Sur htacess,Je pense avoir à peu prés compris ton explication sur htacess et la réévaluation des requêtes, je vais en tenir compte dés que j'aurai franchi l'étape d'enregistrement du formulaire dans ma bd, le https étant, j'espére ok maintenant ( sauf vérification du port 80).

Les codes de connexions que tu m'as notés,  je les ai copiés mais je crains d'aller "un peu, un pont trop loin, trop vite", je vais être de toute façon obligé de les retravailler dans ton sens, puisque je vais devoir ajouter ultérieurement des rôles de connexions suivant le statut de chaque connecté.

J'ai pas compris ta redirection meta ? je devrai me rediriger vers une adresse en https alors que mon accueil est en http ?

Merci encore de ton aide, sincèrement je ne pensais pas déjà arriver là.
pierrot

#53 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

Bonjour Jc,
Je crois que tu as raison, les informations du formulaire public doivent être également protégées.
J'ai mis tout les site en https, maintenant avec .htaccess je vais essayer de rewriter les fichiers (autres que le fichier formulaire) de https vers http,
Normalement le fichier formulaire resterait en https et les autres en http, je vais essayer
Ça doit ressembler à qqchose comme ça dans un fichier .htacces placé dans le répertoire du dossier formulaire:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Bon Week End
et merci bien sûr
PIERROT

#54 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

Bonjour Jc,

je pense avoir compris un petit peu, je vais reprendre tes conseils point par point pour tenter de les mettre en application.

Ton retour 4 /Merci pour la différence entre crypter et hasher, je ne le savais pas, cela veut dire que le sha1 est irréversible, si je ne me trompe pas..

Ton retour 2 / Concernant le stockage en php, ou je dois alors le stocker ?
il est pourtant bien, me semble t'il, dans le tableau de session "Authentification" que j'ai par ailleurs modifié hier (tuto) , cela donne maintenant (et ça fonctionne sans erreur) :
<?php
class Authentification{
            static function isLogged(){
             if(isset($_SESSION['Authentification']) && isset($_SESSION['Authentification']['login1']) && isset($_SESSION['Authentification']['pass1'])){
                     extract($_SESSION['Authentification']);
                     $db=mysql_connect("mabase.eu.mysql", "mabase_eu", "mon code accés Bd");
                     mysql_select_db("mabase.eu", $db);
                    $sql = " SELECT id FROM confid WHERE login1='$login1' AND pass1='$pass1'";
                    $req = mysql_query($sql) or die(mysql_error());
                     if(mysql_num_rows($req)>0){
                         return true;
                    }
                    else{
                        return false;
                    }

             }     
                else{
                    return false;
                }
            }
        }
?>


Ton retour 6 /Cependant,juste une interrogation, comme tu le précises cela oblige à connaître les noms, prénoms,.. de la personne, et donc je dois les enregistrer préalablement dans la Bd, et pour les enregistrer il faut que lors du remplissage du formulaire public je capte leurs coordonnées, c'est ça ? et que donc je dois aussi sécuriser le formulaire public ?
Donc si je résume le processus :
MonSitePublic =>FormulairePublic=>enregistrement informations de contact du Formulaire Public dans la Bd=>envoi Login&Mdp privé au contact => login du contact en Session privée en cohérence avec la Bd=> utilisation du 2nd formulaire privé pour échange confidentiel en session privée.
Je devrai probablement aussi sécuriser le formulaire public puisqu'il échange avec la Bd  ?

J'avais déjà abordé l'enregistrement en Bd à partir des infos du formulaire privé, donc après login privé, mais j'avais arrêté puisque j'avais déjà du mal avec la "simple" sécurisation.
Voilà ce que j'avais fait dans le code du formulaire de la session privée, mais cela ne fonctionnait pas..:
<?php
session_start();
require("authentification.php");
if(Authentification::isLogged()){
    $db=mysql_connect("opuscloud.eu.mysql", "opuscloud_eu", "y0vkxg@44");
    mysql_select_db("opuscloud_eu", $db);
    $query= mysql_query("INSERT INTO confid VALUES(",'$nomprenom','$mail','$telephone'")");
}

else{
    header('Location: login.php');
}

.. erreur ligne 7 ..

Pour synthétiser
1/ Je vais tout reposer pour ne pas entrer dans une complexité immédiate que je ne saurai maîtriser, donc l'ordre de travail serait en priorité d'enregistrer les infos contact du formulaire public dans ma Bd avnat toute autre chose.
2/ puis ensuite travailler sur cela ( $_SESSION['Authentification']=serialize(array("Id"=>2,"Nom"=>"DUPONT","Prénom"=>"Jean-Louis")); sur le retour de la requête de vérification du login + Mot de passe.

je vais aller dans ce sens.
Pour info, J'ai trouvé mon erreur, maintenant tout fonctionne,la session privée est accessible uniquement par le login et je peux passer de page privée en page privée tant que je n'ai pas actionné le logout.

Merci encore pour ta guidance, j'avance là ou je ne pensais pas être en capacité d'aller..
pierrot

#55 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

Bonjour,

merci de "réatteler", ton aide me sera un atout important comme la dernière fois.

Concernant la 1ére règle
tu indiques de ne jamais stocker Login & Mdp au niveau applicatif, je pensais que si je stockais ceux-ci dans ma base et que j'allais vérifier leurs concordances avec le login & Mdp sha1 entrés dans le formulaire, il devenait difficile de les "pirater" ?

Si une des informations du formulaire est erronée après vérification en Bd, je retourne "mauvais identifiants", je croyais donc que le login et Mdp ne remontait pas au niveau applicatif ? qu'ils étaient simplement vérifiés par la requête ?

J'ai dans ma Bd, l'Id, login et mot de passe, le mot de passe étant entré déjà en crypté sha1 dans la Bd, c'est pour ça que j'ai crypté sa variable dans le login.php - $pass1=sha1($pass1);-
Lorsque je suis la vidéo tuto, je teste le passage des variables login/Mdp avec print_r($_SESSION), j'ai :
Array([Authentification]-=>Array([login1]=>[pass1]=> c1289acbc563258eafd2466....)), le mot de passe qui est passé est donc bien crypté sha1 et, si j'ai compris, il serait impossible de le décrypter " à l'envers" dans l'applicatif ?, je pensais être en sécurité puisque le Mdp de ma base est également en sha1...

Tu m'indiques devoir stocker l'Id, le nom et le prénom de la personne connectée.
La personne qui veut entrer sur la session privée rempli un formulaire en session publique, y note ses coordonnées, et après cela je lui envoie par mail les codes d'accès de la session privée.
Cela ferait que je dois entrer dans ma Bd les coordonnées de la personne ?

Tu vois, je suis toujours débutant..

Je vais travailler sur ce que tu m'indiques et améliorer la sécurité, je vais bien finir par y arriver.. avant de passer sur postgresql..plus tard...
Peux tu me dire mes erreurs de raisonnements, je vais y aller étape par étape, tranquillement.
merci bien
pierrot

#56 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

Bonjour,

me voila de nouveau avec une nouvelle difficulté, la 1ére partie du sujet précédent est Ok et fonctionne toujours parfaitement.

J'ai entrepris de passer à un "échelon supérieur" en me connectant à un Bdn Mysql qui contient login et mot de passe, crypté en sha1, l'observation trés juste de Jc concernant le minimum syndical en terme de protection m'a engagé dans cette évolution. Je tiens encore ici à remercier Jc pour son aide.
Je me suis trés trés largement inspiré d'un tuto vidéo, mais je ne sais pas si je peux mettre le lien ici ?

Donc voilà maintenant ma difficulté :

Apartir d'un site public, je pointe sur une session sécurisée qui contient plusieurs pages privées ( pageprivee1.php, pageprivee2.php, ..).
Ce lien dirige vers un formulaire de login + mot de passe (sha1) déjà enregistrés dans ma Bdn Mysql.

Les codes du fichier login.php

<?php
session_start();
//verification : affiche le tableau qui contient les variables de session
//print_r($_SESSION);
//verification envoi login et pass

if(isset($_POST) && !empty($_POST['login1']) && !empty($_POST['pass1'])){
//extraction de login et pass du tableau en tant que variables
    extract($_POST);
    $pass1 = sha1($pass1);
//CONNEXION  selection BASE DONNEE
    $db=mysql_connect("mabase.eu.mysql", "mabase_eu", ".........");
    mysql_select_db("mabase_eu", $db);
// lancement requete
    $sql = " SELECT id FROM matable WHERE login1='$login1' AND pass1='$pass1'";
    $req = mysql_query($sql) or die(mysql_error());
//echo mysql_num_rows($req);// nombre de correspondance trouvée + condition si correspondance > 0
    if(mysql_num_rows($req)>0){
        $_SESSION['Authentification'] = array(
// creation champs tableau AUTH
            'login1' => $login1,
            'pass1' => $pass1
        );
        header('Location:pageprivee.php'); // à ce niveau je m'aperçois que même si je clique sur pageprivee2.php en session privee, je dois me reloguer à chaque fois et reviens toujours sur pageprivee1 - à voir peut être avec l'objet de mes difficultés en bas de page- ..
    }
    else{
        echo "mauvais identifiant login1";
    }
}
?>

qui contient aussi mon formulaire ci dessous

<form action="login.php" method="post">
<fieldset>
<legend>Merci de vous authentifier en session confidentielle</legend>
<p>
<label for="login1">Login :</label>
<input type="text" name="login1"/>
</p>
<p>
<label for="password">Password :</label>
<input type="password" name="pass1"/>
<input type="submit" value="Vous connecter"/>
</p>
</fieldset>
</form>


Puis mon fichier de déconnexion logout.php

<?php
session_start();
$_SESSION = array();
session_destroy();
header("Location: http://www.monSitePublic.eu");
?>


AUTHENTIFICATION
Fichier class Authentification.php

<?php
class Authentification{
            static function isLogged(){
             if(isset($_SESSION['Authentification']) && isset($_SESSION['Authentification']['login1']) && isset($_SESSION['Authentification']['pass1'])){
                    return true;
                }
                else{
                    return false;
                }
            }
        }
?>

Enfin mes fichiers pageprivee1.php, pageprivee2.php,...

<?php
session_start();
require("authentification.php");
if(Authentification::isLogged()){
   
}
else{
    header('Location: login.php');
}
?><!DOCTYPE html>
<html>
...
</html>


L'objet de mes difficultés :

Chaque pageprivee.php contient un menu de navigation d'une pageprivee à l'autre
Si je me logue via login.php, j'ouvre bien ma pageprivee1.php ... et lorsque je clique sur pageprivee2.php je dois de nouveau me reloguer malgré que je me sois déjà authentifié en me loguant sur pageprivee1.php via authentification.php.

A priori mes connexions en Bdn se font normalement.

Merci de l'aide,
pierrot

#57 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

CA MARCHE impeccablement !!! big_smile
Est ce que je peux me permettre de recontacter sous huitaine ou plus concernant une meilleure sécurisation ?
Je vais m'atteler à un autre sécurisation avec Mysql.
Quoiqu'il en soit, je comprendrai si tu étais trop occupé, c'est déjà beaucoup ton coup de pouce, et MERCI ENCORE wink
pierrot

#59 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

Bonjour, et merci de vos contacts, j'en ai bien besoin,

oui, il y a aussi la même erreur dans "include_once", sans erreur le code est donc :
<?php
include_once("check_formulaireacess.php");
?>

J'ai pas compris pourquoi Jc indique que c'est normal que le formulaire de connexion ne soit pas chargé ? je ne suis plus.. je ne dois rien mettre dans include_one ==> include_once(), c'est ça ?
Ce qui ferait :
<?php
include_once("check_()");
?>

pierrot

#60 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

juste une petite correction dans les codes, il faut remplacer formulaire.php par formulaireacces.php, j'ai fait une erreur de copiage ( mauvais fichier), excusez moi

#61 Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

pierrot35
Réponses : 110

Bonjour,

Je cale sur ceci :
J'ai un dossier "origine.php", ce dossier contient des fichiers  .php comme ci dessous :
http:// www.xxxxx.fr/origine.php/
- index.php
- formulaireaccess.php
- page1.php
- page2.ĥp
- ..

Voila les codes php du formulaireacces, de l'index.php et des autres pages

Codes Formulaireaccess

<?php
session_start();
define('LOGIN','toto');
define('PASSWORD','tata');
if(isset($_POST['login'], $_POST['password']))
{
    if($_POST['login'] === LOGIN && $_POST['password'] === PASSWORD)
    {
          $_SESSION['login'] = true;
      header("Location: index.php");
          exit;
    }
}
?>
<html>...</html>
 

Code index.php du dossier origine

<?php
session_start();
if(!isset($_SESSION['login']))
{
    header("Location: formulaire.php");
    exit;
}
?>
<html>...</html>
 

code autres pages

<?php
include_once("check_formulaire.php");
?>

<html>...</html>


(re) Tout les fichiers php sont dans le même dossier "origine"

Mon problème :
si je lance les URL.php de origine.php ou index.php, tout va bien, mon formulaire s'active et demande id et Mdp.
Par contre, si je lance les URL(s).php  des autres pages ( ex page1.php), j'arrive directement sur son IHm sans passer par le formulaire, donc plus de sécurité.

A prirori le "include_once("check_formulaire.php");" n'est pas activé , je comprends pas ce qui se passe, ou est mon erreur ,
Merci de coup de main , je suis loin d'être un expert Php..

cdlt
pierre

Pied de page des forums

Propulsé par FluxBB