Che cos'è il formato di file PHAR?
I file .phar sono associati all'ambiente di sviluppo PHP. Un archivio .phar è l'equivalente PHP di un file JAR - raggruppa un'intera applicazione o libreria PHP in un unico pacchetto eseguibile e autonomo che può essere distribuito come un singolo file.
Che tipo di dati possono contenere i file PHAR?
Gli archivi .phar memorizzano script PHP e qualsiasi risorsa di supporto (template, configurazioni, risorse), opzionalmente compressi con gzip o bzip2 su base per-file o per l'intero archivio. Ogni file .phar contiene uno stub PHP eseguibile, un manifesto binario che elenca i file inclusi con i relativi metadati e una firma crittografica opzionale (MD5, SHA-1, SHA-256, SHA-512 o OpenSSL) verificata tramite phar.require_hash.
Come posso eseguire i file PHAR?
I file .phar possono essere eseguiti direttamente con l'interprete a riga di comando di PHP: php app.phar. Esempi ben noti includono composer.phar e phpunit.phar. La creazione o la modifica programmatica di un Phar richiede l'impostazione phar.readonly=0 nel file php.ini, che di default è impostata su 1 (sola lettura).
Problemi di sicurezza relativi ai file PHAR
A partire da PHP 5.3.0, il supporto Phar è abilitato per impostazione predefinita. L'esecuzione automatica di codice PHAR in un ambiente PHP comporta seri rischi per la sicurezza del sistema. Sono noti casi in cui codice PHP malevolo è stato distribuito in file PHAR mascherati da file JPEG o .txt tramite una semplice sostituzione dell'estensione. L'apertura di un file del genere può causare l'infezione del sistema con software dannoso. Inoltre, l'attivazione di stream wrapper Phar (phar://) su percorsi file controllati da un utente malintenzionato può deserializzare i metadati incorporati e portare all'esecuzione di codice remoto tramite object-injection.
Sicurezza e incolumità
RISCHIO: HIGHUn PHAR è codice PHP eseguibile, quindi trattalo come qualsiasi programma: esegui solo Phar provenienti da fonti ufficiali e affidabili (come composer.phar da getcomposer.org o phpunit.phar da phpunit.de) e verifica il checksum o la firma pubblicata quando forniti. Oltre all'esecuzione, i Phar sono un noto vettore di attacco lato server: lo stream wrapper phar:// può deserializzare metadati incorporati, consentendo l'iniezione di oggetti PHP / esecuzione di codice remoto se un'applicazione passa percorsi controllati dall'attaccante alle funzioni di gestione file. Non eseguire mai un .phar non richiesto e, sui server, evita di passare input utente a funzioni che possono risolvere percorsi phar://.
Dettagli del formato
in sintesiProgrammi che aprono file PHAR
php tool.phar (o php tool.phar --help) per avviarlo. php tool.phar (o php tool.phar --help) per avviarlo. php tool.phar (o php tool.phar --help) per avviarlo. Dettagli tecnici
specifiche approfondite| Punto di ingresso (stub) | Stub PHP eseguibile che termina con il token `__HALT_COMPILER();`, che segna l'inizio del manifesto binario |
| Magic byte della firma finale | Magic byte di 4 byte GBMB nel blocco della firma finale (presente solo nei Phar firmati) |
| Compressione | Nessuna, Zlib (gzip) o Bzip2 - configurabile per singolo file o per l'intero archivio |
| Algoritmi di firma | MD5, SHA-1, SHA-256, SHA-512 o OpenSSL X.509 (controllati da phar.require_hash nel php.ini) |
| Metodo di esecuzione | Esecuzione diretta con `php app.phar`; nessuna estrazione richiesta |
| Requisito di creazione | `phar.readonly=0` deve essere impostato nel php.ini per creare o modificare file Phar a runtime |
| Layout interno | Stub PHP + manifesto binario (elenco file, versione API, flag) + dati dei file + blocco firma opzionale |
| Ordine dei byte | Little-endian |
| Dimensioni tipiche | Da decine di KB a decine di MB (es. composer.phar ~2 MB, phpunit.phar ~3 MB) |
| Supporto versioni PHP | Incluso di default da PHP 5.3 (2009); mantenuto fino a PHP 8.x |
| Rischio di sicurezza | La deserializzazione Phar tramite lo stream wrapper `phar://` su percorsi controllati da un attaccante può innescare RCE via object-injection |
| Layout di payload supportati | Phar flat, Phar basato su tar o Phar basato su zip (PHP seleziona il formato dal manifesto) |
| Rilasciato | 2008 (Phar extension bundled in PHP 5.3) |
| Ultima versione | Maintained as a core PHP extension (current through PHP 8.x) |
| Standard aperto | Sì · royalty-free |
| Specifica | www.php.net |
Conversioni PHAR
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file PHAR.
Domande frequenti
Come si esegue un file PHAR?
php tool.phar. Su Linux/macOS puoi anche usare chmod +x tool.phar && ./tool.phar se contiene uno shebang. Fare doppio clic di solito non funziona.Cos'è un file PHAR?
Come si apre un PHAR per vederne il contenuto?
È sicuro eseguire un file PHAR?
Perché il mio PHAR non si avvia - errore 'phar.readonly'?
Posso trasformare un PHAR in un EXE?
php tool.phar, oppure impacchetta PHP con il Phar usando un packager dedicato se hai davvero bisogno di un .exe autonomo.