Gros pb de sécurité sur mon site avec l'utilisation de session_start(); [Résolu]

Signaler
Messages postés
1
Date d'inscription
jeudi 19 décembre 2019
Statut
Membre
Dernière intervention
19 décembre 2019
-
 Eric29950 -
Bonjour à tous,

Je ne suis pas un spécialiste de php mais je reprends un script d’authentification troué pour accéder à une page personnalisée !

Le probleme: Quand un utilisateur accède, après avoir saisi le coupe identifiant/password, à sa page
/usr/local/nginx/html/username_exemple, il peut sans saisir de nouvel identifiant accéder directement à la page d'un autre utilisateur /usr/local/nginx/html/autre_username_exemple !
C'est génant .... et n'ayant pas d'expérience en sécurité php je coince .... pourtant, session_start(); est bien dans le premier script .... Auriez vous des suggestions ? D'avance merci !
(ps: désolé pour les ^M dans le les scripts, un dos2unix passera par la prochainement.)

Je décris:

Fichier index.php qui affiche la page d'authentification.

<?php ^M
require_once 'main.php';^M
session_start();^M
^M
extract($_REQUEST);^M
if(isset($name) || isset($pass))^M
{^M
    if($name == $app['auth']['username'] && $pass == $app['auth']['password']) $_SESSION['in'] = 1;^M
    else echo "ERROR: Incorrect username or password!";^M
}^M
^M
if(!$_SESSION['in']) { ?>^M
        <html>^M
    <head></head>^M
    <body><BR /><BR />^M
<center><img src="./player/logos/logo-400x130-streaming.png"</center>
<div style="text-align:center;border:1px solid #7E0219">
Support technique par mail : doc@ie.com
</div>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">^M
   <p> <center> Username: <input type="text" name="name" value="">^M
   </center> <p />^M
    <p> <center>Password: <input type="password" name="pass">^M
    </center><p />^M
    <center><input type="submit" name="submit" value="Log In">^M
    </center>^M
    </body>^M
    </html>^M
        <?php^M
        die(); ^M
}^M
        ^M
^M
?>^M


Le fichier main.php appelé par le script précédent index.php (require_once 'main.php';)

<?php
require_once dirname(__FILE__).'/config.php';

// Connect to db
$conn = ($GLOBALS["___mysqli_ston"] = mysqli_connect($app['db']['host'],  $app['db']['username'],  $app['db']['password'])) or die("mysql Error: ".mysqli_error($GLOBALS["___mysqli_ston"]));
$db = mysqli_select_db( $conn, $app['db']['database']) or die("mysql Error: ".mysqli_error($GLOBALS["___mysqli_ston"]));

// Common classes
require_once dirname(__FILE__).'/controllers/MatchManager.php';



function getViewable($file, $vars=array())
{
        // Make sure view file exists
        if(!file_exists($file))
        {
                die("View file not found: ".$file);
                return false;
        }

        extract($vars);

        // Get buffer Buffer
        ob_start();
        include($file);
        $buffer = ob_get_contents();
        @ob_end_clean();
        return $buffer;
}


// Get key/value array from a jquery serializeArray() result
function getKVarray($jqArray)
{
        //$vars = array();
        foreach($jqArray as $pair)
        {
                $t = "\$".$pair['name']." = '".addSlashes($pair['value'])."';\n";
                eval($t);
                //$vars[$pair['name']] = $pair['value'];
        }
        //extract($vars);
        unset($jqArray, $pair, $t, $vars);
        return get_defined_vars();



Et enfin le fichier config.php dans lequel se trouvent les identifiants, mots de passe et les infos de connexion à une base de données Mysql/MariaDB (pour l'appli pas pour l'authentification).

<?php
global $app;
$app['db']['host'] = 'localhost';
$app['db']['username'] = 'scorer';
$app['db']['password'] = 'scorer_password';
$app['db']['database'] = 'scorer_db_name';

// Admin login information
$app['auth']['username'] = 'exemple';
$app['auth']['password'] = 'exemple_password';

1 réponse

Messages postés
2078
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
18 février 2020
2
Bonjour,

Ce qui me gêne le plus dans ce code, ce n'est même pas ton soucis qu'une personne puisse voir la page ne lui étant pas autorisé, c'est plutôt que tu stocke les identifiants en clair, bonjour la sécurité.

On stocke ce genre d'information en BDD et on crypte le mot de passe.

J'espère que tu es débutant car sinon c'est assez grave et j'espère ne jamais tomber sur l'un de tes sites :/

Reprends tout de zéro, y a pas grand chose de bon là dedans

Cordialement,
Bonjour et merci pour ta réponse. J'ai repris un autre code très récent avec stockage des id/pw dans mysql mais le pb persiste. Du coup j'utilise la méthode radicale htpasswd même si mon serveur tourne avec nginx.