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