PHP CGI Modus


Tags: PHP

Byte draait PHP standaard in CGI modus. In de CGI modus wordt er voor elke ‘hit’ een apart PHP programma uitgevoerd onder jouw eigen gebruikersnaam.

Voordelen van PHP in CGI Mode

  • Het is goed te beveiligen. De PHP draait als je gebruikersnaam in plaats van apache. Dat betekent dat je de database wachtwoorden in een bestand kan stoppen dat alleen leesbaar is door jou en je PHP scripts! Ook kan je hierdoor makkelijker je files beheren via FTP, en hoef je niet met chmod permissies te werken.
  • Het is net zo snel als het draaien van PHP als een Apache module en het is mogelijk modules te laden.

Nadelen van PHP in CGI Mode

Er zijn een paar zeer kleine nadelen aan het draaien van PHP-CGI. Deze zijn:

  • PHP instellingen aangepast via  .htaccess bestanden zullen niet werken. Je moet hiervoor de minder bekende .user.ini files gebruiken. Je kunt ook PHP instellingen wijzigen via het servicepanel. Zie ook PHP instellingen
  • HTTP basic authentication werkt niet zonder een omweg. Er zijn overigens maar weinig websites die hier gebruik van maken.

Basic authentication in CGI mode

Je kunt basic authentication in PHP gebruiken door een .htaccess met de volgende regels te maken. Let op! Heb je reeds ee .htaccess? Plaats deze regels dan onderaan de bestaande file

RewriteEngine on
RewriteCond %{HTTP:Authorization} (.+)
RewriteRule .* - [E=BYTE_AUTHORIZATION:%{HTTP:Authorization},L]

Aan het begin van je PHP script moet je dan het volgende zetten:

if (isset($_SERVER['REDIRECT_BYTE_AUTHORIZATION'])) {
  list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) =
    explode(':', base64_decode(substr($_SERVER['REDIRECT_BYTE_AUTHORIZATION'], 6)));
}

Daarna zijn de

$_SERVER['PHP_AUTH_USER']

en

$_SERVER['PHP_AUTH_PW']

variabelen gewoon in je PHP script beschikbaar.

Digest authentication in CGI mode

Ook Digest authentication in PHP is mogelijk in CGI modus. Je doet dit door de volgende regels in een .htaccess te plaatsen:

RewriteEngine on
RewriteCond %{HTTP:Authorization} (.+)
RewriteRule .* - [E=BYTE_AUTHORIZATION:%{HTTP:Authorization},L]

Aan het begin van je php script moet je dan het volgende zetten:

if (isset($_SERVER['REDIRECT_BYTE_AUTHORIZATION'])) {$_SERVER['PHP_AUTH_DIGEST'] = preg_replace("/^Digest /", "", $_ENV['REDIRECT_BYTE_AUTHORIZATION']);}

Vervolgens kun je gewoon de $_SERVER[‘PHP_AUTH_DIGEST’] variabele aanspreken zoals je gewend bent.

API Toegang in CGI mode

Veel API’s, waaronder die van Magento, maken gebruik van de Authorization header. Je kan deze gebruiken door de volgende regels in een .htaccess te plaatsen:

RewriteEngine on
RewriteCond %{HTTP:Authorization} (.+)
RewriteRule .* - [E=BYTE_AUTHORIZATION:%{HTTP:Authorization},L]

Aan het begin van je php script (Bij Magento is dit api.php) moet je dan het volgende zetten:

if ($_ENV['REDIRECT_BYTE_AUTHORIZATION']) {
        $_SERVER['AUTHORIZATION'] = $_ENV['REDIRECT_BYTE_AUTHORIZATION'];
}

Vervolgens kun je gewoon de $_SERVER['AUTHORIZATION'] variabele aanspreken zoals je gewend bent.

0