Wat is het PHAR-bestandsformaat?
.phar-bestanden zijn gekoppeld aan de PHP-ontwikkelomgeving. Een .phar-archief is het PHP-equivalent van een JAR-bestand - het verpakt een volledige PHP-applicatie of bibliotheek in een enkele, op zichzelf staande, uitvoerbare bundel die als één bestand kan worden gedistribueerd.
Wat voor soort gegevens kunnen PHAR-bestanden bevatten?
.phar-archieven slaan PHP-scripts en alle ondersteunende assets (sjablonen, configuraties, bronnen) op, optioneel gecomprimeerd met gzip of bzip2 op basis van per bestand of het hele archief. Elk .phar-bestand bevat een uitvoerbare PHP-stub, een binaire manifest die de gebundelde bestanden met metadata vermeldt, en een optionele cryptografische handtekening (MD5, SHA-1, SHA-256, SHA-512 of OpenSSL) die wordt geverifieerd via phar.require_hash.
Hoe kan ik PHAR-bestanden uitvoeren?
.phar-bestanden kunnen rechtstreeks worden uitgevoerd met de PHP command-line interpreter: php app.phar. Bekende voorbeelden zijn composer.phar en phpunit.phar. Het programmatisch maken of wijzigen van een Phar vereist phar.readonly=0 in php.ini, wat standaard op 1 (alleen-lezen) staat.
Beveiligingsproblemen met betrekking tot PHAR-bestanden
Sinds PHP 5.3.0 is Phar-ondersteuning standaard ingeschakeld. Automatische PHAR-code-uitvoering in een PHP-omgeving vormt ernstige risico's voor de systeembeveiliging. Er zijn gevallen bekend waarbij kwaadaardige PHP-code werd gedistribueerd in PHAR-bestanden die waren vermomd als JPEG- of .txt-bestanden door middel van eenvoudige extensievervanging. Het openen van een dergelijk bestand kan ertoe leiden dat het systeem besmet raakt met kwaadaardige software. Bovendien kan het triggeren van Phar-stream-wrappers (phar://) op door aanvallers gecontroleerde bestandspaden ingebedde metadata deserialiseren en leiden tot object-injection remote code execution.
Beveiliging & veiligheid
RISICO: HIGHEen PHAR is uitvoerbare PHP-code, dus behandel het als elk ander programma: voer alleen Phars uit van vertrouwde, officiële bronnen (composer.phar van getcomposer.org, phpunit.phar van phpunit.de), en verifieer de gepubliceerde checksum/handtekening indien beschikbaar. Naast het uitvoeren ervan zijn Phars een beruchte aanvalsvector aan de serverzijde: de phar:// stream-wrapper kan ingebedde metadata deserialiseren, wat PHP object-injection / remote code execution mogelijk maakt als een applicatie door de aanvaller gecontroleerde paden doorgeeft aan bestandsfuncties. Voer nooit een ongevraagde .phar uit en vermijd op servers het invoeren van gebruikersinput in functies die phar:// paden kunnen resolven.
Formaatdetails
in een notendopProgramma's die PHAR-bestanden openen
php tool.phar (of php tool.phar --help) uit om het uit te voeren. php tool.phar (of php tool.phar --help) uit om het uit te voeren. php tool.phar (of php tool.phar --help) uit om het uit te voeren. Technische details
diepe specificaties| Ingangspunt (stub) | Uitvoerbare PHP-stub die eindigt met het `__HALT_COMPILER();` token, dat het begin van de binaire manifest markeert |
| Trailing signature magic | GBMB 4-byte magic in het afsluitende handtekeningblok (alleen aanwezig in ondertekende Phars) |
| Compressie | Geen, Zlib (gzip), of Bzip2 - configureerbaar per bestand of voor het hele archief |
| Handtekeningalgoritmen | MD5, SHA-1, SHA-256, SHA-512 of OpenSSL X.509 (beheerd door phar.require_hash in php.ini) |
| Uitvoeringsmethode | Rechtstreeks uitvoeren met `php app.phar`; uitpakken is niet vereist |
| Vereiste voor creatie | `phar.readonly=0` moet worden ingesteld in php.ini om Phar-bestanden tijdens runtime te maken of te wijzigen |
| Interne lay-out | PHP-stub + binaire manifest (bestandslijst, API-versie, vlaggen) + bestandsgegevens + optioneel handtekeningblok |
| Byte-volgorde | Little-endian |
| Typische grootte | Tientallen KB tot tientallen MB (bijv. composer.phar ~2 MB, phpunit.phar ~3 MB) |
| Ondersteuning PHP-versie | Standaard meegeleverd sinds PHP 5.3 (2009); onderhouden tot en met PHP 8.x |
| Beveiligingsrisico | Phar-deserialisatie via de `phar://` stream-wrapper op door aanvallers gecontroleerde paden kan object-injection RCE veroorzaken |
| Ondersteunde payload-indelingen | Flat Phar, op tar gebaseerde Phar, of op zip gebaseerde Phar (PHP selecteert het formaat uit de manifest) |
| Uitgebracht | 2008 (Phar extension bundled in PHP 5.3) |
| Laatste versie | Maintained as a core PHP extension (current through PHP 8.x) |
| Open standaard | Ja · royaltyvrij |
| Specificatie | www.php.net |
PHAR conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over PHAR-bestanden.
Veelgestelde vragen
Hoe voer ik een PHAR-bestand uit?
php tool.phar. Op Linux/macOS kunt u ook chmod +x tool.phar && ./tool.phar gebruiken als het een shebang heeft. Dubbelklikken werkt meestal niet.Wat is een PHAR-bestand?
Hoe open ik een PHAR om te zien wat erin zit?
Is het veilig om een PHAR-bestand uit te voeren?
Waarom draait mijn PHAR niet - 'phar.readonly' fout?
Kan ik een PHAR omzetten naar een EXE?
php tool.phar uit, of bundel PHP met de Phar met behulp van een speciale packager als u echt een zelfstandige .exe nodig heeft.