Posso compilare PHP per nascondere il codice?

1

È emerso un problema piuttosto critico, che è più legale che tecnico, ma spero di trovare una soluzione tecnica a basso costo. Ci sono leggi in alcuni paesi (lascerò il nome) dove devi conservare i dati su un server in quel paese. È impossibile separare completamente il software di back-end dal database. Il governo di questo paese può accedere al server e tutti i dati su di esso a volontà e passarlo a un concorrente di proprietà statale o sponsorizzato.

Non mi preoccupo dei dati degli utenti perché sono tenuti separatamente dagli utenti di altri paesi, ma sono molto preoccupato per il codice PHP che è completamente aperto sul server.

C'è un modo in cui posso compilare o offuscare in qualche modo il codice PHP in modo che possa ancora funzionare sul server ma non può essere visualizzato / modificato / modificato come un software compilato?

O è l'unica opzione tecnica per passare a un linguaggio di programmazione compilato come Java?

EDIT: per favore non cancellare il mio post. So che non è molto degno, ma la risposta sotto di Jörg W Mittag è inestimabile! Forse qualcuno con una migliore conoscenza della programmazione può modificare la mia domanda per adattarla meglio alla risposta? Grazie:)

    
posta Arthur Tarasov 10.04.2018 - 08:49
fonte

2 risposte

9

Is there a way I can compile or obfuscate the PHP code somehow so that it can still run on the server but cannot be viewed/edited/modified like compiled software?

No.

Affinché il codice possa essere eseguito sul server, la CPU deve capirlo. Le CPU sono molto, molto più stupide degli umani. Se la CPU riesce a capirlo, anche un umano può farlo. Se lo fai in modo che un essere umano non possa capire il codice, allora neanche una CPU può farlo e non puoi più eseguirlo.

A proposito: tutte le implementazioni PHP attualmente esistenti (Zend Engine, HVVM, P8, Quercus, Phalanger, Peachpie, HippyVM, Tagua VM, JPHP, ...) compileranno effettivamente il codice PHP.

Or is the only technical option to switch to a compiled programming language like Java?

No.

Non fa differenza. Il codice deve essere sul server in una forma che il server possa capirlo. Ma poi anche un umano può capirlo.

La soluzione solo possibile per assicurarti che qualcuno non possa accedere al tuo codice è ... non concedere loro l'accesso al tuo codice. È davvero così semplice.

Il modo più semplice per raggiungere questo obiettivo è quello di mantenere il codice nei propri locali e di offrire l'accesso solo tramite un servizio strettamente controllato. Ad esempio, Google mantiene il suo codice segreto.

Un modo molto, molto, molto più difficile e più costoso è quello di avere una crittografia completa end-to-end del codice. In sostanza, si consegna il server come una scatola nera impenetrabile a prova di manomissione che consente l'accesso solo attraverso un servizio strettamente controllato. Il trucco qui è assicurarsi che la black box resti "black". Ciò richiede il pieno controllo del sistema operativo, di tutte le librerie, della CPU, della scheda madre, della RAM, di tutti i bus e dei chip I / O nel sistema e così via.

Ricorda la XBox? Microsoft ha trasmesso la chiave di crittografia master dal modulo di crittografia alla CPU tramite un bus non crittografato. Pensavano che questo sarebbe andato bene perché non esiste hardware in grado di snoopare un bus così veloce. Bene, si scopre che se hai un oscilloscopio da 10000000 $ e molto tempo a disposizione, puoi realmente spiare quel bus e, come succede, il MIT ha inventato un oscilloscopio del genere, gli studenti del MIT hanno hanno un sacco di tempo a disposizione, sono addestrati alla crittanalisi e a loro piace eseguire Linux su tutto, quindi hanno creato un installer Linux per XBox, che a sua volta è stato ideato da cracker per creare programmi di installazione per giochi piratati.

A proposito: non esiste un "linguaggio di programmazione compilato". La compilazione o l'interpretazione sono tratti del compilatore o interprete (duh!), Non della lingua. Vivono su livelli completamente diversi di astrazione. Se l'inglese fosse una lingua tipizzata, il termine "linguaggio di programmazione compilato" sarebbe un errore di tipo. Ogni lingua può essere implementata con un compilatore e ogni lingua può essere implementata con un interprete. Ad esempio, tutte le implementazioni di PHP, JavaScript, Python e Ruby attualmente esistenti hanno compilatori. Al contrario, ci sono interpreti per C, C ++ e Haskell.

    
risposta data 10.04.2018 - 09:38
fonte
5

Puoi offuscare ma non puoi nasconderti completamente. Sono stato costretto a usare sia ionCube e Zend Guard, che eseguono questa offuscazione, e non c'è una grande differenza tra loro. Questi prodotti precompilano i file PHP in bytecode (opcode) e inviano solo il bytecode in un contenitore crittografato. Durante il runtime, un loader (che è necessario abilitare sul server) decrittografa il bytecode e lo inserisce in memoria.

Quando usi questi strumenti, lo snooping casuale viene bloccato, ma un determinato attaccante può ancora capire che cosa fa il tuo codice. Anche la modifica diventa più difficile perché il codice sorgente non è incluso (solo il bytecode). La decompilazione del bytecode in (qualche forma di) codice sorgente è comunque possibile e sembrano esserci alcuni strumenti commerciali online che fanno questo, ma non ho esperienza con loro.

    
risposta data 10.04.2018 - 12:16
fonte

Leggi altre domande sui tag