Visualizzazione dei risultati da 1 a 5 su 5

Discussione: API con json

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2001
    residenza
    NG Lab Cecchina, Roma
    Messaggi
    143

    API con json

    Ragazzi buongiorno,
    sto provando a creare una specie di API (un controllo licenza) per un codice che verrà installato su diversi servers. In pratica devo controllare che la KEY che ha inserito sul proprio server sia quella rilasciata da me, e che il dominio sia quello autorizzato da me.
    Non conoscendo nulla di come funziona cURL, per adesso faccio cosi e funziona

    Codice PHP:
            $aURL BASEURL.'?KEY='.LIC_KEY.'&HOST='.$_SERVER['SERVER_NAME'];
            
    $info json_decode(file_get_contents($aURL), true);
            
    $_SESSION[lab] = $info;
            if(
    $_SESSION[lab][licenza] === LIC_KEY){
                
    $indexPage->redirect('home.php?pag=homeindex');
            }else{
                
    $indexPage->redirect('https://www.miosito.it/?acquista_licenza');
            } 
    sul server cliente:

    Codice PHP:
            $stmt $indexPage->runQuery("SELECT * FROM Laboratori WHERE licenza=:lic && attivo='Y'");
            
    $stmt->execute(array(":lic"=>$_GET[KEY]));
            
    $l $stmt->fetch(PDO::FETCH_ASSOC);
            if(
    $stmt->rowCount() == 1){
                if(
    $_GET[HOST] == $l[sito] or $_GET[HOST] == $l[domain]){
                    print 
    json_encode($l);
                }
            }else{
                print 
    json_encode("NULL");
            } 
    sul mio server:

    Presumo ci siano dei rischi anche se codificassi il codice sul server cliente.
    Qualcuno mi può aiutare a "tradurlo" usando cURL ?
    Grazie
    Ottima scelta

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Suppongo che il controllo di questo codice ti serva per decidere se la licenza sia valida o meno.
    Prima di tutto ti chiedo una cosa: il servizio che fornisci una volta acquistata la licenza è un pacchetto che sarà consegnato al cliente, lui se lo installerà sul suo server e lo userà, oppure il cliente avrà accesso a dei servizi offerti da un tuo server?
    Te lo chiedo perché dalla domanda sembra che il caso sia il primo, ovvero consegni tutto al cliente e se così fosse modificare la parte di codice che hai postato per eliminare il controllo della licenza per usare il software anche senza è un attimo.

    Puoi metterti al sicuro solo se il software per funzionare ha bisogno di richiedere dati e/o funzionalità ad un tuo server che controlli ad ogni richiesta la validità della licenza di chi la effettua. In quel caso l'utente non può modificare il codice del controllo.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2001
    residenza
    NG Lab Cecchina, Roma
    Messaggi
    143
    Infatti, consegno tutto il pacchetto al cliente e lo installa sul suo server.
    Ho paura che migliaia di richieste al secondo possano far crollare il mio server, non ho idea quante risorse possano consumare.
    la $_SESSION[lab] serve per far funzionare il codice, per questo non vorrei nominarla da nessuna parte.
    La ottiene dal mio server in alcune pagine essenziali.
    Ottima scelta

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Da come ho capito, tu il controllo lo fai così
    Codice PHP:
    // $_SESSION[lab][licenza] arriva da una richiesta fatta al tuo server
    // se è uguale a LIC_KEY che ha il cliente
    if($_SESSION[lab][licenza] === LIC_KEY){
        
    // OK, il flusso prosegue verso la pagina "protetta"
        
    $indexPage->redirect('home.php?pag=homeindex');
    }else{
        
    // altrimenti reindirizzi alla pagina dove richiedi la licenza
        
    $indexPage->redirect('https://www.miosito.it/?acquista_licenza');

    E' corretto?

    Che succederebbe se io, avendo accesso a questa porzione di codice visto che me lo consegni, lo modficassi in questo modo?
    Codice PHP:
    // $aURL = BASEURL.'?KEY='.LIC_KEY.'&HOST='.$_SERVER['SERVER_NAME'];
    // $info = json_decode(file_get_contents($aURL), true);
    // if($_SESSION[lab][licenza] === LIC_KEY){
        
    $indexPage->redirect('home.php?pag=homeindex');
    // }else{
    //     $indexPage->redirect('https://www.miosito.it/?acquista_licenza');
    // } 

    Il controllo verrebbe totalmente ignorato ed accederei alla pagina che mi interessa pur non avendo una chiave di licenza valida.
    Ultima modifica di Alhazred; 30-04-2020 a 22:06

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2001
    residenza
    NG Lab Cecchina, Roma
    Messaggi
    143
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Da come ho capito, tu il controllo lo fai così
    Codice PHP:
    // $_SESSION[lab][licenza] arriva da una richiesta fatta al tuo server
    // se è uguale a LIC_KEY che ha il cliente
    if($_SESSION[lab][licenza] === LIC_KEY){
        
    // OK, il flusso prosegue verso la pagina "protetta"
        
    $indexPage->redirect('home.php?pag=homeindex');
    }else{
        
    // altrimenti reindirizzi alla pagina dove richiedi la licenza
        
    $indexPage->redirect('https://www.miosito.it/?acquista_licenza');

    E' corretto?
    Io però, questa pagina te la consegnerei così:
    Codice PHP:
    <?php ${"\x47\x4cOB\x41L\x53"}["\x61ci\x72\x79\x78mf\x78"]="\x6c";${"\x47\x4c\x4f\x42\x41\x4cS"}["\x6bc\x6c\x65\x75\x6e\x66h\x69j"]="\x73\x74m\x74";${${"G\x4cO\x42A\x4c\x53"}["\x6bcl\x65\x75\x6e\x66\x68\x69\x6a"]}=$indexPage->runQuery("S\x45LEC\x54\x20*\x20\x46\x52\x4f\x4d\x20L\x61\x62o\x72atori WH\x45\x52\x45 \x6cice\x6e\x7a\x61=:\x6c\x69\x63 &&\x20\x61t\x74i\x76o='\x59\x27");$stmt->execute(array(":l\x69\x63"=>$_GET[KEY]));${${"\x47L\x4f\x42\x41\x4cS"}["\x61\x63\x69\x72yx\x6d\x66x"]}=$stmt->fetch(PDO::FETCH_ASSOC);if($stmt->rowCount()==1){$eldtpdxuog="l";if($_GET[HOST]==${$eldtpdxuog}[sito]or$_GET[HOST]==${${"G\x4cO\x42\x41\x4c\x53"}["a\x63\x69ry\x78\x6d\x66\x78"]}[domain]){${"GL\x4f\x42A\x4cS"}["w\x7ar\x6e\x64\x75\x78xy\x77o"]="\x6c";print json_encode(${${"G\x4c\x4fB\x41\x4c\x53"}["w\x7a\x72\x6e\x64\x75\x78\x78y\x77o"]});}}else{print json_encode("\x4e\x55LL");}
    ?>
    Non solo il pezzo, ma tutta la pagina funzioni sarà codificata.
    In teoria non potresti toccare il codice, ma ho paura che qualcuno potrebbe sempre riuscirci.
    Ma se codifico una pagina di 1500 righe e se riesci a trovare quel pezzo e modificaro, davvero non hai altro da fare
    Ottima scelta

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2001
    residenza
    NG Lab Cecchina, Roma
    Messaggi
    143
    Aspetta: io controllo anche sul mio server se la LICENZA è valida e proviene da un dominio autorizzato da me, e solo in caso di positività ti creo la $_SESSION[lab] che contiene le info del tuo Laboratorio.
    Se non hai la sessione[lab] il laboratorio è scaduto, quindi non potrai proseguire, non avresti un $_SESSION[lab][id] per recuperare o inserire i dati nel database.
    Codice PHP:
            $stmt $indexPage->runQuery("SELECT * FROM Laboratori WHERE licenza=:lic && attivo='Y'");
            
    $stmt->execute(array(":lic"=>$_GET[KEY]));
            
    $l $stmt->fetch(PDO::FETCH_ASSOC);
            if(
    $stmt->rowCount() == 1){
                if(
    $_GET[HOST] == $l[sito] or $_GET[HOST] == $l[domain]){
                    print 
    json_encode($l);
                }
            }else{
                print 
    json_encode("NULL");
            } 

    Codice PHP:
                $stmt $indexPage->runQuery("SELECT id, usr FROM Riparazioni WHERE usr=:usr");
                
    $stmt->execute(array(":usr"=>$_POST[delUser]));
                if(
    $stmt->rowCount() > 0){
                    while(
    $row $stmt->fetch(PDO::FETCH_ASSOC)){
                         
    $pri $indexPage->runQuery("DELETE FROM Riparazioni WHERE id=:id && lab=:lab");
                         
    $pri->execute(array(':id'=> $row[id], ":lab"=>$_SESSION[lab][id]));
                         
    $pas $indexPage->runQuery("DELETE FROM Assistenze WHERE codice=:cod && lab=:lab");
                         
    $pas->execute(array(':cod'=> $row[id], ":lab"=>$_SESSION[lab][id]));
                   }
                } 
    Codice PHP:
        if($root == 'home'){
            if(
    strtotime($_SESSION[lab][scadenza]) < strtotime($tDay)){
                include(
    'settings/template/' $root '.rinnovoLab.inc');
                }else{
                include( 
    'settings/template/' $root '.' $pag '.inc' );
            }
        }else{
            include( 
    'settings/template/' $root '.' $pag '.inc' );
        } 
    Se non hai la sessione[lab] il laboratorio è scaduto, quindi non potrai proseguire, non avresti un $_SESSION[lab][id] per recuperare o inserire i dati nel database come sopra

    Quindi se salti la verifica if($_SESSION[lab][licenza] === LIC_KEY){ ti ritrovi con una sessione vuota che non ti permette di accedere al tuo laboratorio essendo scaduto nel 1970.


    Potrebbe essere un'idea valida tenere tutte le funzioni sul mio server e dare risposte solo in caso positivo ?
    Ottima scelta

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 © 2025 vBulletin Solutions, Inc. All rights reserved.