Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1181 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème de code PHP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de code PHP

n°1922939
Boris l'in​vincible
Life is random
Posté le 10-09-2009 à 14:11:28  profilanswer
 

Bonjour,
 
J'ai un site internet que j'avais codé il y a 5ans...
Actuellement mon hebergeur bloque un des fichiers car il appel un code extérieur de spam ...
Voici ce qui me dit :  

Using index2,php file, spamming was done.
This file is allowing remote file exclusion.
http://63.119.22.215/auto.txt??


 
Voici le code du fichier en question.
 
Vu que je ne touche plus dutout à la programmation depuis si une âme charitable pouvais me dire ou se situe le problème dans le script suivant :
 

Code :
  1. <?
  2. ######### Appels des fichiers de fonctions, de connexion
  3. require "functions.php";
  4. require "dbconnect.php";
  5. $langue=$_GET['lang'];
  6. if($langue=='')$langue=$_POST['lang'];
  7. require "$langue.lang";
  8. session_start();
  9. session_destroy();
  10.   $finallogin = $HTTP_COOKIE_VARS["savlogin"]; // variable pour remplir le cookie
  11.   $template = new template("templates" );
  12.   // on def le mode a appliquer
  13.   switch($action){
  14. case 'login':
  15.       $login=$_POST['nom'];
  16.       //On vérifie que le login et le mot de passe ne sont pas vides
  17.       if ($login == '') $err="$l_login_err1";
  18.       if ($_POST['password'] == '' && $err== '') $err= "$l_pass_err1";
  19.       //Par recoupement avec la BDD on vérifie que le login et le password sont corrects
  20.        if($err==''){
  21.          $sql="SELECT nom, password, id, pays FROM clients WHERE nom='$login'";
  22.          if(!$result = mysql_query($sql, $db)) die (mysql_error());
  23.          list($nom, $pass, $user_id, $pays)=mysql_fetch_row($result);
  24.          if($_POST['password']==$pass){
  25.          // on place un cookie pour le login
  26.          setcookie("savlogin", $login, (time()+15552000), "$cookiepath" );
  27.          $usr_langue=$langue;
  28.          //on cree une session pour l'utilisateur identifié
  29.          session_register("nom" );
  30.          session_register("pass" );
  31.          session_register("usr_langue" );
  32.          session_register("user_id" );
  33.          session_register("pays" );
  34.          session_start();
  35.          // on load le template
  36.          $template->lire_tpl(array("index2" => "index2$pays.html" ));
  37.          $template->stock_var_value(array(
  38.                                                    "l_err1" => $l_err,
  39.                                                    "lang" => $langue,
  40.                                                    "l_msg" => $l_welcome,
  41.                                                    ));
  42.          $template->exec_tpl("index2" );
  43.          exit();
  44.          }
  45.          else{
  46.          $err=$l_err_pass;
  47.          }
  48.        }
  49.        if($err!=''){
  50.                   //On redirige vers la page d'appel de la connexion
  51.                   $template->lire_tpl(array("login" => "login.html" ));
  52.                   $template->stock_var_value(array(
  53.                                                    "finallogin" => $finallogin,
  54.                                                    "l_user_name" => $l_user_name,
  55.                                                    "langue" => $langue,
  56.                                                    "l_valider" => $l_valider,
  57.                                                    "l_index" => $l_login_index,
  58.                                                    "l_login" => $l_login,
  59.                                                    "l_access" => $l_access,
  60.                                                    "l_password_index" => $l_password_index,
  61.                                                    "err1" => $err
  62.                                                    ));
  63.                   $template->exec_tpl("login" );
  64.                   exit();
  65.               }
  66.         Break;
  67.        default:
  68.                   $template->lire_tpl(array("login" => "login.html" ));
  69.                   $template->stock_var_value(array(
  70.                                                    "finallogin" => $finallogin,
  71.                                                    "l_user_name" => $l_user_name,
  72.                                                    "langue" => $langue,
  73.                                                    "vac" => $vac,
  74.                                                    "l_valider" => $l_valider,
  75.                                                    "l_index" => $l_login_index,
  76.                                                    "l_login" => $l_login,
  77.                                                    "l_access" => $l_access,
  78.                                                    "l_password_index" => $l_password_index
  79.                                                    ));
  80.                   $template->exec_tpl("login" );
  81.                   exit();
  82.   Break;
  83.   }
  84. ?>


 
Merci d'avance pour votre aide.
 
 

mood
Publicité
Posté le 10-09-2009 à 14:11:28  profilanswer
 

n°1922942
soju
One shot !
Posté le 10-09-2009 à 14:26:53  profilanswer
 

Indice :

Boris l'invincible a écrit :

Code :
  1. require "$langue.lang";



n°1922943
rufo
Pas me confondre avec Lycos!
Posté le 10-09-2009 à 14:28:37  profilanswer
 

require "$langue.lang";  
Le contenu de $langue venant d'un $_GET ou $_POST, sans aucun contrôle derrière, ça me paraît très risqué.
Ensuite, tu fais session_start(); suivi d'un session_destroy();
C'est très bizarre ça...
 
Après, session_register() est obsolète, on utilise $_SESSION[]
 
setcookie() peut-être aussi poser un soucis...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1922949
Boris l'in​vincible
Life is random
Posté le 10-09-2009 à 14:37:58  profilanswer
 


 
ok merci je suppose donc que c'est bcp mieux si je remplace par :
 

Code :
  1. require "http://nomdusite.com/$langue.lang";


n°1922981
rufo
Pas me confondre avec Lycos!
Posté le 10-09-2009 à 15:14:01  profilanswer
 

bof. Je vérifierais surtout que le fichier $langue.lang existe bien sur ton serveur avant de l'inclure.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1922990
Boris l'in​vincible
Life is random
Posté le 10-09-2009 à 15:38:20  profilanswer
 

rufo a écrit :

bof. Je vérifierais surtout que le fichier $langue.lang existe bien sur ton serveur avant de l'inclure.


 
oui il existe bien un fichier nl.lang pour le neerlandais et un fichier fr.lang pour le francais, sur la page index principale l'utilisateur à le choix de la langue, c'est cette variable qui était renvoyé par GET.

n°1922991
FlorentG
Unité de Masse
Posté le 10-09-2009 à 15:40:02  profilanswer
 

Test alors par exemple que $langue ne contient que 2 caractères alphabétiques

n°1923194
rufo
Pas me confondre avec Lycos!
Posté le 11-09-2009 à 10:10:12  profilanswer
 

moi, je pensais surtout à faire :
if (file_exists($langue.lang))
{
    require "$langue.lang";
}
 
Ca me paraît quand même plus sécurisé...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1923204
FlorentG
Unité de Masse
Posté le 11-09-2009 à 10:31:27  profilanswer
 

Nan, faut quand-même vérifier le format, sinon on peut toujours ouvrir n'importe quoi genre :

Code :
  1. pouet.php?langue=/etc/passwd%00


Donc, faire :

Code :
  1. $langue = isset($_GET['langue']) ? strtolower($_GET['langue']) : null;
  2. if($langue == null) {
  3.   throw new Exception('Une langue est attendue en paramètre');
  4. }
  5. if(!preg_match('/^[a-z]{2,2}$/', $langue)) {
  6.   throw new Exception('Identificateur de langue invalide');
  7. }
  8. if(!is_file($langue . '.lang')) {
  9.  
  10.   $langFiles = glob('*.lang');
  11.   $langs = array();
  12.   foreach($langFiles as $file) {
  13.     $langs[] = basename($file, '.lang');
  14.   }
  15.   throw new Exception('Langue non supportée. Langues valides : ' . implode(', ', $langs));
  16. }
  17. require $langue . '.lang';


Message édité par FlorentG le 11-09-2009 à 10:34:02

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème de code PHP

 

Sujets relatifs
[PHP/XML] Problème pour trouver le code PHP à partir du code VBS[PHP] Problème d'enregistrement en base
Problème code erreur PHPProblème avec Wamp et code PHP
[PHP] problème code...Problème d'intégration de code PHP ...
Problème avec un code PHPProblème en PHP pour contenir des " dans le code
[Résolu] Probleme de résolutin de code html ecrit avec du php par echoProbleme dans le code (PHP)
Plus de sujets relatifs à : Problème de code PHP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR