Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    migrazione PHP 5 -> 7 - autorizzazione fallita

    Ho migrato l'intero gestionale (+200 files) da PHP 5.5 a 7.4 e funziona tutto tranne questo file di autorizzazione che girava sotto la versione precedente ma non sotto la 7 e non riesco a trovare la funzione incompatibile (php non me lo segnala)

    Lo posto commentato :


    Codice PHP:

    ini_set
    ('display_errors''1');
    ini_set('display_startup_errors''1');
    error_reporting(E_ALL);

    ini_set('session.gc_maxlifetime''6000');
    if (!isset(
    $_SESSION)) {
      
    session_start();
    }
    $MM_authorizedUsers "";
    $MM_donotCheckaccess "true";

    // *** Restrict Access To Page: Grant or deny access to this page
    function isAuthorized($strUsers$strGroups$UserName$UserGroup) {
      
    // For security, start by assuming the visitor is NOT authorized.
      
    $isValid False;

      
    // When a visitor has logged into this site, the Session variable MM_Username set equal to their username.
      // Therefore, we know that a user is NOT logged in if that Session variable is blank.
      
    if (!empty($UserName)) {
        
    // Besides being logged in, you may restrict access to only certain users based on an ID established when they login.
        // Parse the strings into arrays.
       
        
    $arrUsers Explode(","$strUsers);
        
    $arrGroups Explode(","$strGroups);
      if (
    in_array($UserName$arrUsers)) {
          
    $isValid true;
        }

        
    // Or, you may restrict access to only certain users based on their username.
        
    if (in_array($UserGroup$arrGroups)) {
          
    $isValid true;
        }
        if ((
    $strUsers == "") && true) {
          
    $isValid true;
        }
      }
      return 
    $isValid;
    }

    $MM_restrictGoTo "loginSorry.php";
    if (!((isset(
    $_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers$_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {  
      
    $MM_qsChar "?";
      
    $MM_referrer $_SERVER['PHP_SELF'];
      if (
    strpos($MM_restrictGoTo"?")) $MM_qsChar "&";
      if (isset(
    $QUERY_STRING) && strlen($QUERY_STRING) > 0)
      
    $MM_referrer .= "?" $QUERY_STRING;
      
    $MM_restrictGoTo $MM_restrictGoTo$MM_qsChar "accesscheck=" urlencode($MM_referrer);
      
    header("Location: "$MM_restrictGoTo);
      exit;
    }

    if(
    $_SESSION['MM_UserGroup'] < 4)
    {
    header("Location: Pub_loginSorry.php");
    }
    /* echo "--------------------------------------------------------- gc_maxlifetime -> ".ini_get('session.gc_maxlifetime');*/ 
    Questa la pagina di accesso:

    Codice PHP:
    if (!isset($_SESSION)) {
      
    session_start();
    }

    $loginFormAction $_SERVER['PHP_SELF'];
    if (isset(
    $_GET['accesscheck'])) {
      
    $_SESSION['PrevUrl'] = $_GET['accesscheck'];
    }

    if (isset(
    $_POST['username'])) {
      
    $loginUsername=mysqli_real_escape_string($tao_conn$_POST['username']);
      
    $password=mysqli_real_escape_string(sha1($tao_conn$_POST['password']));
      
    $MM_fldUserAuthorization "AuthLev";
      
    $MM_redirectLoginSuccess "index.php";
      
    $MM_redirectLoginFailed "loginSorry.php";
      
    $MM_redirecttoReferrer false;
      
    mysqli_select_db($tao_conn$database_tao_conn);$LoginRS__query=sprintf("SELECT username, password, AuthLev FROM adminauth WHERE username=%s AND password=%s",
      
    GetSQLValueString($tao_conn,$loginUsername"text"), GetSQLValueString($tao_conn,$password"text")); 
       
      
    $LoginRS mysqli_query($tao_conn,$LoginRS__query) or die(mysqli_error($tao_conn));
      
    $loginFoundUser mysqli_num_rows($LoginRS);
      if (
    $loginFoundUser) {
        
        
    $loginStrGroup  mysqli_result($LoginRS,0,'AuthLev');
        
        if (
    PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
        
    //declare two session variables and assign them
        
    $_SESSION['MM_Username'] = $loginUsername;
        
    $_SESSION['MM_UserGroup'] = $loginStrGroup;          

        if (isset(
    $_SESSION['PrevUrl']) && false) {
          
    $MM_redirectLoginSuccess $_SESSION['PrevUrl'];    
        }
        
    header("Location: " $MM_redirectLoginSuccess );
      }
      else {
        
    header("Location: "$MM_redirectLoginFailed );
      } 
    Ultima modifica di nicemotion; 05-08-2020 a 13:48

  2. #2
    il problema è mysql_result($LoginRS,0,'AuthLev');

    come posso riscriverlo per renderlo compatibile con php7 dato che non esiste l'equivalente ?


    Ultima modifica di nicemotion; 05-08-2020 a 14:20

  3. #3
    cosi non va -.-

    Codice PHP:

    $field 
    AuthLev ;

    mysql_data_seek($LoginRS,0);
    if( !empty(
    $field) ) {
      while(
    $finfo mysqli_fetch_field$LoginRS )) {
        if( 
    $field == $finfo->name ) {
          
    $f mysqli_fetch_assoc$LoginRS );
          
    $loginStrGroup  $f$field ];
        }
      }
    } else {
      
    $f mysqli_fetch_array$LoginRS );
      
    $loginStrGroup  $f[0];


  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    mysql_ != mysqli_

    su PHP7 le istruzioni mysql_ non ci sono più.

  5. #5
    A me pare di aver riscritto tutte le funzioni correttamente ma a sto punto ho dei dubbi e posto per intero:

    Codice PHP:
    if (!isset($_SESSION)) {
      
    session_start();
    }



    function 
    mysqli_result($result,$row=0,$field=0)
    {

        
    $numrows $result->num_rows;
       
        if (
    $numrows && $row <= ($numrows-1) && $row >=0){
            
    $result->data_seek(0);
            
    $result->data_seek($row);
            
    $resrow = (is_numeric($field)) ? mysqli_fetch_row($result) : mysqli_fetch_assoc($result);
           
            if (isset(
    $resrow[$field])){return $resrow;}
        }
        return 
    false;
    }



    $loginFormAction $_SERVER['PHP_SELF'];
    if (isset(
    $_GET['accesscheck'])) {
      
    $_SESSION['PrevUrl'] = $_GET['accesscheck'];
    }

    if (isset(
    $_POST['username'])) {
      
    $loginUsername=mysqli_real_escape_string($tao_conn$_POST['username']);
      
    $password=mysqli_real_escape_string(sha1($tao_conn$_POST['password']));
      
    $MM_fldUserAuthorization "AuthLev";
      
    $MM_redirectLoginSuccess "index.php";
      
    $MM_redirectLoginFailed "loginSorry.php";
      
    $MM_redirecttoReferrer false;
      
    mysqli_select_db($tao_conn$database_tao_conn);
      
    $LoginRS__query=sprintf("SELECT username, password, AuthLev FROM adminauth WHERE username=%s AND password=%s",
      
    GetSQLValueString($tao_conn,$loginUsername"text"), GetSQLValueString($tao_conn,$password"text")); 
       
      
    $LoginRS mysqli_query($tao_conn,$LoginRS__query) or die(mysqli_error($tao_conn));
      
    $loginFoundUser mysqli_num_rows($LoginRS);
      if (
    $loginFoundUser) {
        
      
    $loginStrGroup  mysqli_result($LoginRS,0,'AuthLev'); // problema
       
       
    $field AuthLev ;
      
    mysqli_data_seek($LoginRS,0);
    if( !empty(
    $field) ) {
    while(
    $finfo mysqli_fetch_field$LoginRS )) {
    if( 
    $field == $finfo->name ) {
    $f mysqli_fetch_assoc$LoginRS );
    $loginStrGroup $f$field ];
    }
    }
    } else {
    $f mysqli_fetch_array$LoginRS );
    $loginStrGroup $f[0];
    }
       
        
        if (
    PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
        
    //declare two session variables and assign them
        
    $_SESSION['MM_Username'] = $loginUsername;
        
    $_SESSION['MM_UserGroup'] = $loginStrGroup;          

        if (isset(
    $_SESSION['PrevUrl']) && false) {
          
    $MM_redirectLoginSuccess $_SESSION['PrevUrl'];    
        }
        
    header("Location: " $MM_redirectLoginSuccess );
      }
      else {
        
    header("Location: "$MM_redirectLoginFailed );
      }


  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    uno di questi due secondo me va tolto (ipotizzo il primo)
    Codice PHP:
    $result->data_seek(0);
    $result->data_seek($row); 
    l'errore che ti restituisce qual è?

  7. #7
    Grazie clasku,

    la
    Codice PHP:
    mysqli_result($LoginRS,0,'AuthLev'
    scritta cosi funziona... il problema pare essere adesso questa funzione (per evitare sql injection) :

    Codice PHP:
    $password=mysql_real_escape_string(sha1($_POST['password'])); 
    che ho riscritto cosi per PHP7 ma non funziona..

    Codice PHP:
    $password=mysqli_real_escape_string(sha1($tao_conn$_POST['password'])); 

  8. #8
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    stai mettendo in sha1 anche la risorsa della connessione
    sha1 credo debba andare solo sul valore del POST, anche se mi sembra inutile fare l'escape perché sha1 restituisce un numero esadecimale...

  9. #9
    Quote Originariamente inviata da clasku Visualizza il messaggio
    stai mettendo in sha1 anche la risorsa della connessione
    -> molto vero!

    Quote Originariamente inviata da clasku Visualizza il messaggio
    sha1 credo debba andare solo sul valore del POST, anche se mi sembra inutile fare l'escape perché sha1 restituisce un numero esadecimale...

    Codice PHP:
    $password=sha1($_POST['password']); 
    Funziona, grazie
    Ultima modifica di nicemotion; 06-08-2020 a 11:00

  10. #10
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    di niente

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.