Paul: richtige einstellung von: allow_url_fopen, allow_url_fopen usw.

Ich kann in meiner Verlwatlung folgende PHP Einstellungen ausüben.
Doch ich weis nicht so recht was ich erlauben soll, und was nicht, bzw. was die Nachteile sind

register_globals
allow_url_fopen
allow_url_include
magic_quotes_gpc
expose_php

Paul

  1. Tach!

    Doch ich weis nicht so recht was ich erlauben soll, und was nicht, bzw. was die Nachteile sind

    register_globals

    Ein nahezu ausgestorbenes Feature. Bringt bei schlechter Programmierung mehr Ärger als nutzen.

    allow_url_fopen

    Braucht dein Code sowas wie file_get_contents('http://example.com/dokument');? Vermutlich gelegentlich. Das kann man angeschaltet lassen.

    allow_url_include

    Inkludierst du Code über URLs statt nur lokale Dateien? Meist macht man das aus guten Gründen nicht und will es auch keinem Script erlauben.

    magic_quotes_gpc

    Auch das ist ein aussterbendes Feature. Bringt auch mehr Kopfweh als Sicherheit. Es gibt ein eigenen Kapitel im PHP-Handbuch zu den Magic Quotes.

    expose_php

    Ob da nun in den HTTP-Response-Headern drinsteht, das PHP und in welcher Version auf dem Server läuft oder nicht, ist eigentlich für niemanden relevant. Außer für diejenigen, die irgendwelche Sicherheitslücken ausnutzen wollen. Aber wenn die da sind, geht das auch ohne dass der Server ein laufendes PHP offenbart.

    dedlfix.

    1. allow_url_fopen

      Braucht dein Code sowas wie file_get_contents('http://example.com/dokument');? Vermutlich gelegentlich. Das kann man angeschaltet lassen.

      Aber bitte nicht aktiv verwenden sondern auf das wesentlich flexiblere und leistungsfähigere cURL sezten:

      Das file_get_contents() kann man z.B. durch diesen Schnipsel hier ersetzen:

      <?php  
      $handle = curl_init();  
        
      curl_setopt_array(  
      	$handle,  
      	array(  
      		CURLOPT_URL             => 'http://example.com/dokument',  
      		CURLOPT_HEADER          => false,  
      		CURLOPT_RETURNTRANSFER  => true,  
      	)  
      );  
      $foo = curl_exec($handle);  
      curl_close($handle);  
      ?>
      

      Ist zwar etwas weniger bequem, durch die optionen aber deutlich einfacher konfigurierbar - besonders wenns komplizierter wird (Zugriffsschutz, andere Request-Methode, Cookies, ein Proxy usw ).

      1. Tach!

        allow_url_fopen
        Braucht dein Code sowas wie file_get_contents('http://example.com/dokument');? Vermutlich gelegentlich. Das kann man angeschaltet lassen.

        Aber bitte nicht aktiv verwenden sondern auf das wesentlich flexiblere und leistungsfähigere cURL sezten:

        Kurz gesagt: Wer's braucht ...

        Das file_get_contents() kann man z.B. durch diesen Schnipsel hier ersetzen:

        Warum einfach, wenn es umständlich auch geht?

        Ist zwar etwas weniger bequem, durch die optionen aber deutlich einfacher konfigurierbar - besonders wenns komplizierter wird (Zugriffsschutz, andere Request-Methode, Cookies, ein Proxy usw ).

        Wenn ich den ganzen Schnickschnack nicht brauche, dann ist CURL übertrieben. Wer es doch braucht, der kann auch einen Stream-Kontext nehmen. Beispiel aus dem PHP-Handbuch:

        <?php  
        // Create a stream  
        $opts = array(  
          'http' => array(  
            'method' => "GET",  
            'header' => "Accept-language: en\r\n" .  
                        "Cookie: foo=bar\r\n"  
          )  
        );  
          
        $context = stream_context_create($opts);  
          
        // Open the file using the HTTP headers set above  
        $file = file_get_contents('http://www.example.com/', false, $context);  
        
        

        Das method kann man hier weglassen, GET ist sowieso der Defaultwert.

        dedlfix.

        1. Hallo!

          allow_url_fopen
          Braucht dein Code sowas wie file_get_contents('http://example.com/dokument');? Vermutlich gelegentlich. Das kann man angeschaltet lassen.

          Aber bitte nicht aktiv verwenden sondern auf das wesentlich flexiblere und leistungsfähigere cURL sezten:

          Kurz gesagt: Wer's braucht ...
          Warum einfach, wenn es umständlich auch geht?
          Wenn ich den ganzen Schnickschnack nicht brauche, dann ist CURL übertrieben. Wer es doch braucht, der kann auch einen Stream-Kontext nehmen. Beispiel aus dem PHP-Handbuch:

          Der Vollständigkeit halber geht das alles natürlich auch noch schöner mit fsockopen. Das braucht dann auch kein allow_url_fopen mehr (wenn ich mich gerade nicht irre).

          Grüße, Matze

          1. Tach!

            Der Vollständigkeit halber geht das alles natürlich auch noch schöner mit fsockopen. Das braucht dann auch kein allow_url_fopen mehr (wenn ich mich gerade nicht irre).

            Ja, aber dann hast du dich vollständig selbst um alle Feinheiten des Protokolls zu kümmern. Das mag bei HTTP 1.0 noch gehen, aber bei 1.1 kommen dann schon solche Dinge wie Chunked Encoding hinzu. Das ist nicht unlösbar, aber etwas nervig. Man will sich nicht mehr als notwendig selbst mit diesen unteren Schichten des Protokoll-Stacks befassen müssen.

            dedlfix.

            1. Hallo!

              _Der Vollständigkeit halber_

              ;)
              Sicher ist der Einsatz nicht so einfach wie mit anderen genannten Beispielen, er bietet aber auch andere Möglichkeiten.

              Grüße, Matze