Problème de sécurité avec script d'authentification et PHP sessions

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 : Problème de sécurité avec script d'authentification et PHP sessions

Re: Problème de sécurité avec script d'authentification et PHP sessions

par eric29950 » 20 déc. 2019, 10:01

Merci pour ta réponse. Je vais regarder cela ou partir sur un autre script d'authentification.
Bonne journée.

Re: Problème de sécurité avec script d'authentification et PHP sessions

par @rthur » 20 déc. 2019, 01:19

Je comprends rien à ton code, mais voici le principe :
Il faut que tu récupères le nom de l'utilisateur connecté et que tu le compares avec celui dont tu t'apprêtes à afficher les infos.
Si ce n'est pas les mêmes => Affiche un message d'erreur

Problème de sécurité avec script d'authentification et PHP sessions

par eric29950 » 19 déc. 2019, 18:26

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 couple 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 
require_once 'main.php';
session_start();

extract($_REQUEST);
if(isset($name) || isset($pass))
{
    if($name == $app['auth']['username'] && $pass == $app['auth']['password']) $_SESSION['in'] = 1;
    else echo "ERROR: Incorrect username or password!";
}

if(!$_SESSION['in']) { ?>
        <html>
    <head></head>
    <body><BR /><BR />
<center><img src="./player/logos/logo-400x130-streaming.png"</center>
<div style="text-align:center;border:1px solid #7E0219">
Support technique par mail : [email protected]
</div>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
   <p> <center> Username: <input type="text" name="name" value="">
   </center> <p />
    <p> <center>Password: <input type="password" name="pass">
    </center><p />
    <center><input type="submit" name="submit" value="Log In">
    </center>
    </body>
    </html>
        <?php
        die(); 
}
        

?>
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';