Merge branch 'userOptions' into kt-dev

Conflicts:
	.gitignore
This commit is contained in:
Knah Tsaeb 2014-08-29 16:01:52 +02:00
commit 6185cbeeaf
4 changed files with 244 additions and 237 deletions

1
.gitignore vendored
View file

@ -220,3 +220,4 @@ mypersonaldata/public/
mypersonaldata/zipversions/ mypersonaldata/zipversions/
!mypersonaldata/zipversions/index.html !mypersonaldata/zipversions/index.html
pass.php pass.php
user_config.php

View file

@ -1,185 +1,185 @@
<?php <?php
/** /**
* @author bronco@warriordudimanche.com / www.warriordudimanche.net * @author bronco@warriordudimanche.com / www.warriordudimanche.net
* @copyright open source and free to adapt (keep me aware !) * @copyright open source and free to adapt (keep me aware !)
* @version 2.0 * @version 2.0
* *
* Verrouille l'accès à une page * Verrouille l'accès à une page
* Il suffit d'inclure ce fichier pour bloquer l'accès * Il suffit d'inclure ce fichier pour bloquer l'accès
* il gère seul l'expiration de session, la connexion, * il gère seul l'expiration de session, la connexion,
* la déconnexion. * la déconnexion.
* *
* Améliorations eventuelles: * Améliorations eventuelles:
* ajouter compteur de tentatives sur ban id. * ajouter compteur de tentatives sur ban id.
* ajouter la sécurisation du $_POST (en cas d'usage d'une base de donnees) * ajouter la sécurisation du $_POST (en cas d'usage d'une base de donnees)
* *
*/ */
session_start(); session_start();
// ------------------------------------------------------------------ // ------------------------------------------------------------------
// configuration // configuration
// ------------------------------------------------------------------ // ------------------------------------------------------------------
$auto_restrict['error_msg']='Erreur - impossible de se connecter.';// utilisé si on ne veut pas rediriger $auto_restrict['error_msg']='Erreur - impossible de se connecter.';// utilisé si on ne veut pas rediriger
$auto_restrict['cookie_name']='sonarrss';// nom du cookie $auto_restrict['cookie_name']='sonarrss';// nom du cookie
$auto_restrict['encryption_key']='abcdef';// clé pour le cryptage de la chaine de vérification $auto_restrict['encryption_key']='abcdef';// clé pour le cryptage de la chaine de vérification
$auto_restrict['session_expiration_delay']=120;//minutes $auto_restrict['session_expiration_delay']=120;//minutes
//$auto_restrict['login']='bronco'; // caractères alphanum + _ et . //$auto_restrict['login']='bronco'; // caractères alphanum + _ et .
$auto_restrict['redirect_error']='index.php?public';// si précisé, pas de message d'erreur $auto_restrict['redirect_error']='index.php?public';// si précisé, pas de message d'erreur
// --------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------
// sécurisation du passe: procédure astucieuse de JérômeJ (http://www.olissea.com/) // sécurisation du passe: procédure astucieuse de JérômeJ (http://www.olissea.com/)
@include('pass.php'); @include('pass.php');
if(!isset($auto_restrict['pass'])){ if(!isset($auto_restrict['pass'])){
if(isset($_POST['pass'])&&isset($_POST['login'])&&$_POST['pass']!=''&&$_POST['login']!=''){ # Création du fichier pass.php if(isset($_POST['pass'])&&isset($_POST['login'])&&$_POST['pass']!=''&&$_POST['login']!=''){ # Création du fichier pass.php
$salt = md5(uniqid('', true)); $salt = md5(uniqid('', true));
file_put_contents('pass.php', '<?php $auto_restrict["login"]="'.$_POST['login'].'";$auto_restrict["salt"] = '.var_export($salt,true).'; $auto_restrict["pass"] = '.var_export(hash('sha512', $salt.$_POST['pass']),true).'; ?>'); file_put_contents('pass.php', '<?php $auto_restrict["login"]="'.$_POST['login'].'";$auto_restrict["salt"] = '.var_export($salt,true).'; $auto_restrict["pass"] = '.var_export(hash('sha512', $salt.$_POST['pass']),true).'; ?>');
include('login_form.php');exit(); include('login_form.php');exit();
} }
else{ # On affiche un formulaire invitant à rentrer le mdp puis on exit le script else{ # On affiche un formulaire invitant à rentrer le mdp puis on exit le script
include('login_form.php');exit(); include('login_form.php');exit();
} }
} }
// --------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------
// ------------------------------------------------------------------ // ------------------------------------------------------------------
// ------------------------------------------------------------------ // ------------------------------------------------------------------
// gestion de post pour demande de connexion // gestion de post pour demande de connexion
// si un utilisateur tente de se loguer, on gère ici // si un utilisateur tente de se loguer, on gère ici
// ------------------------------------------------------------------ // ------------------------------------------------------------------
if (isset($_POST['login'])&&isset($_POST['pass'])){ if (isset($_POST['login'])&&isset($_POST['pass'])){
log_user($_POST['login'],$_POST['pass']); log_user($_POST['login'],$_POST['pass']);
if (isset($_POST['cookie'])){setcookie($auto_restrict['cookie_name'],sha1($_SERVER['HTTP_USER_AGENT']),time()+31104000);}//un an if (isset($_POST['cookie'])){setcookie($auto_restrict['cookie_name'],sha1($_SERVER['HTTP_USER_AGENT']),time()+31104000);}//un an
header('location: index.php'); header('location: index.php');
} }
// ------------------------------------------------------------------ // ------------------------------------------------------------------
// si pas de demande de connexion on verifie les vars de session // si pas de demande de connexion on verifie les vars de session
// et la duree d'inactivité de la session // et la duree d'inactivité de la session
// si probleme,on include un form de login. // si probleme,on include un form de login.
// ------------------------------------------------------------------ // ------------------------------------------------------------------
if (!is_ok()){session_destroy();header('location: index.php?public');exit();} if (!is_ok()){session_destroy();header('location: index.php?public');exit();}
// ------------------------------------------------------------------ // ------------------------------------------------------------------
// demande de deco via la variable get 'deconnexion' // demande de deco via la variable get 'deconnexion'
// ------------------------------------------------------------------ // ------------------------------------------------------------------
if (isset($_GET['deconnexion'])){log_user($_POST['login'],$_POST['pass']);} if (isset($_GET['deconnexion'])){log_user($_POST['login'],$_POST['pass']);}
// ------------------------------------------------------------------ // ------------------------------------------------------------------
//header('location: index.php?public'); //header('location: index.php?public');
// ------------------------------------------------------------------ // ------------------------------------------------------------------
// fonctions de cryptage // fonctions de cryptage
// récupérées sur http://www.info-3000.com/phpmysql/cryptagedecryptage.php // récupérées sur http://www.info-3000.com/phpmysql/cryptagedecryptage.php
// ------------------------------------------------------------------ // ------------------------------------------------------------------
function GenerationCle($Texte,$CleDEncryptage) function GenerationCle($Texte,$CleDEncryptage)
{ {
$CleDEncryptage = md5($CleDEncryptage); $CleDEncryptage = md5($CleDEncryptage);
$Compteur=0; $Compteur=0;
$VariableTemp = ""; $VariableTemp = "";
for ($Ctr=0;$Ctr<strlen($Texte);$Ctr++) for ($Ctr=0;$Ctr<strlen($Texte);$Ctr++)
{ {
if ($Compteur==strlen($CleDEncryptage)) if ($Compteur==strlen($CleDEncryptage))
$Compteur=0; $Compteur=0;
$VariableTemp.= substr($Texte,$Ctr,1) ^ substr($CleDEncryptage,$Compteur,1); $VariableTemp.= substr($Texte,$Ctr,1) ^ substr($CleDEncryptage,$Compteur,1);
$Compteur++; $Compteur++;
} }
return $VariableTemp; return $VariableTemp;
} }
function Crypte($Texte,$Cle) function Crypte($Texte,$Cle)
{ {
srand((double)microtime()*1000000); srand((double)microtime()*1000000);
$CleDEncryptage = md5(rand(0,32000) ); $CleDEncryptage = md5(rand(0,32000) );
$Compteur=0; $Compteur=0;
$VariableTemp = ""; $VariableTemp = "";
for ($Ctr=0;$Ctr<strlen($Texte);$Ctr++) for ($Ctr=0;$Ctr<strlen($Texte);$Ctr++)
{ {
if ($Compteur==strlen($CleDEncryptage)) if ($Compteur==strlen($CleDEncryptage))
$Compteur=0; $Compteur=0;
$VariableTemp.= substr($CleDEncryptage,$Compteur,1).(substr($Texte,$Ctr,1) ^ substr($CleDEncryptage,$Compteur,1) ); $VariableTemp.= substr($CleDEncryptage,$Compteur,1).(substr($Texte,$Ctr,1) ^ substr($CleDEncryptage,$Compteur,1) );
$Compteur++; $Compteur++;
} }
return base64_encode(GenerationCle($VariableTemp,$Cle) ); return base64_encode(GenerationCle($VariableTemp,$Cle) );
} }
function Decrypte($Texte,$Cle) function Decrypte($Texte,$Cle)
{ {
$Texte = GenerationCle(base64_decode($Texte),$Cle); $Texte = GenerationCle(base64_decode($Texte),$Cle);
$VariableTemp = ""; $VariableTemp = "";
for ($Ctr=0;$Ctr<strlen($Texte);$Ctr++) for ($Ctr=0;$Ctr<strlen($Texte);$Ctr++)
{ {
$md5 = substr($Texte,$Ctr,1); $md5 = substr($Texte,$Ctr,1);
$Ctr++; $Ctr++;
$VariableTemp.= (substr($Texte,$Ctr,1) ^ $md5); $VariableTemp.= (substr($Texte,$Ctr,1) ^ $md5);
} }
return $VariableTemp; return $VariableTemp;
} }
//------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------
function id_user(){ function id_user(){
// retourne une chaine identifiant l'utilisateur que l'on comparera par la suite // retourne une chaine identifiant l'utilisateur que l'on comparera par la suite
// cette chaine cryptée contient les variables utiles sérialisées // cette chaine cryptée contient les variables utiles sérialisées
$id=array(); $id=array();
$id['REMOTE_ADDR']=$_SERVER['REMOTE_ADDR']; $id['REMOTE_ADDR']=$_SERVER['REMOTE_ADDR'];
$id['HTTP_USER_AGENT']=$_SERVER['HTTP_USER_AGENT']; $id['HTTP_USER_AGENT']=$_SERVER['HTTP_USER_AGENT'];
$id['session_id']=session_id(); $id['session_id']=session_id();
$id=serialize($id); $id=serialize($id);
return $id; return $id;
} }
function is_ok(){ function is_ok(){
// vérifie et compare les variables de session // vérifie et compare les variables de session
// en cas de problème on sort/redirige en détruisant la session // en cas de problème on sort/redirige en détruisant la session
global $auto_restrict; global $auto_restrict;
$expired=false; $expired=false;
if (isset($_COOKIE[$auto_restrict['cookie_name']])&&$_COOKIE[$auto_restrict['cookie_name']]==sha1($_SERVER['HTTP_USER_AGENT'])){return true;} if (isset($_COOKIE[$auto_restrict['cookie_name']])&&$_COOKIE[$auto_restrict['cookie_name']]==sha1($_SERVER['HTTP_USER_AGENT'])){return true;}
if (!isset($_SESSION['id_user'])){return false;} if (!isset($_SESSION['id_user'])){return false;}
if ($_SESSION['expire']<time()){$expired=true;} if ($_SESSION['expire']<time()){$expired=true;}
$sid=Decrypte($_SESSION['id_user'],$auto_restrict['encryption_key']); $sid=Decrypte($_SESSION['id_user'],$auto_restrict['encryption_key']);
$id=id_user(); $id=id_user();
if ($sid!=$id || $expired==true){// problème if ($sid!=$id || $expired==true){// problème
return false; return false;
}else{ // tout va bien }else{ // tout va bien
//on redonne un délai à la session //on redonne un délai à la session
$_SESSION['expire']=time()+(60*$auto_restrict['session_expiration_delay']); $_SESSION['expire']=time()+(60*$auto_restrict['session_expiration_delay']);
return true; return true;
} }
} }
function log_user($login_donne,$pass_donne){ function log_user($login_donne,$pass_donne){
//cree les variables de session //cree les variables de session
global $auto_restrict; global $auto_restrict;
if ($auto_restrict['login']==$login_donne && $auto_restrict['pass']==hash('sha512', $auto_restrict["salt"].$pass_donne)){ if ($auto_restrict['login']==$login_donne && $auto_restrict['pass']==hash('sha512', $auto_restrict["salt"].$pass_donne)){
$_SESSION['id_user']=Crypte(id_user(),$auto_restrict['encryption_key']); $_SESSION['id_user']=Crypte(id_user(),$auto_restrict['encryption_key']);
$_SESSION['login']=$auto_restrict['login']; $_SESSION['login']=$auto_restrict['login'];
$_SESSION['expire']=time()+(60*$auto_restrict['session_expiration_delay']); $_SESSION['expire']=time()+(60*$auto_restrict['session_expiration_delay']);
return true; return true;
}else{ }else{
exit_redirect(); exit_redirect();
return false; return false;
} }
} }
function redirect_to($page){header('Location: '.$page); } function redirect_to($page){header('Location: '.$page); }
function exit_redirect(){ function exit_redirect(){
global $auto_restrict; global $auto_restrict;
@session_unset(); @session_unset();
@session_destroy(); @session_destroy();
setcookie($auto_restrict['cookie_name'],'',time()+1); setcookie($auto_restrict['cookie_name'],'',time()+1);
if ($auto_restrict['redirect_error']&&$auto_restrict['redirect_error']!=''){//tester sans la deuxième condition if ($auto_restrict['redirect_error']&&$auto_restrict['redirect_error']!=''){//tester sans la deuxième condition
redirect_to($auto_restrict['redirect_error']); redirect_to($auto_restrict['redirect_error']);
}else{exit($auto_restrict['error_msg']);} }else{exit($auto_restrict['error_msg']);}
} }
?> ?>

View file

@ -129,13 +129,16 @@ function render_form($var){
} }
include('auto_restrict.php'); include('auto_restrict.php');
include('config.php'); include('config.php');
if(file_exists('user_config.php')){
include('user_config.php');
}
unset($GLOBAL['private_data_folder']); unset($GLOBAL['private_data_folder']);
unset($GLOBAL['public_data_folder']); unset($GLOBAL['public_data_folder']);
$GLOBAL['default_data_folder']=basename($GLOBAL['default_data_folder']); $GLOBAL['default_data_folder']=basename($GLOBAL['default_data_folder']);
$message=''; $message='';
if ($_POST){ if ($_POST){
$auto_form['filename']='config.php'; $auto_form['filename']='user_config.php';
$auto_form['filecontent']="<?php \n /* The configuration generated with auto_form*/\n\n"; $auto_form['filecontent']="<?php \n /* The configuration generated with auto_form*/\n\n";
$auto_form['variable_name']='$GLOBAL'; $auto_form['variable_name']='$GLOBAL';
$all_keys=explode(' | ',$_POST['all_keys']); $all_keys=explode(' | ',$_POST['all_keys']);

View file

@ -35,6 +35,9 @@ if (isset($_GET['tag'])){$search_tags=strip_tags($_GET['tag']);}else{$search_tag
// CONFIGURABLE OPTIONS // CONFIGURABLE OPTIONS
// adapter la configuration dans le fichier config.php // adapter la configuration dans le fichier config.php
include('config.php'); include('config.php');
if(file_exists('user_config.php')){
include('user_config.php');
}
$GLOBAL['version']='2.2'; $GLOBAL['version']='2.2';
$GLOBAL['respawn_url']=returncurrenturl(); $GLOBAL['respawn_url']=returncurrenturl();