Cronjobs mit headers_sent() absichern?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Cronjobs mit headers_sent() absichern?

    Hallo,
    mal eine generelle Frage:

    wenn ich einen PHP-Script-Cronjob im Rahmen einer Webanwendung entwickele und das Cronjob-Script nicht außerhalb der Webspace liegen soll, verwende ich seit einiger Zeit headers_sent(), damit niemand das Script von außen per Browser aufrufen kann.

    Also zum Beispiel:

    #!/usr/bin/php -q
    <?php
    if (headers_sent()) {
    if (getUserRole() != ROLE_ADMIN) {
    die();
    }
    }

    Meine Frage dazu:
    Ist diese Methode sicher?
    Gibt es irgendeinen Weg, das Senden des Headers von außen zu unterbinden und somit die headers_sent()-Funktion auszutricksen?

    Viele Grüße
    Saskia

  • #2
    Naja, gib der Datei doch einfach einen Namen den man so nicht erraten kann. Dann wird sie auch nicht ausgeführt. Alternativ könntest du auch einfach testen ob z.B. $_SERVER['PHP_SELF'] gestzt ist - denn wenn man PHP auf der Konsole ausführt, gibts das nicht. (Vergleiche Manual)


    Ansonsten würde ich nicht unbedingt auf headers_sent() setzen, denn wenn z.b. output buffering an ist, werden die header auch erst zum Schluss gesendet...
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Mach doch ne Verzeichnisstruktur wo die Cron-Scripte von aussen nicht erreichbar sind.

      Code:
      - html
        + _doc
        + cron
        + www

      Oder versperre per htaccess den Zugang zu dem CronJob-Verzeichniss. Oder erlaube ihn, für Scripte die über den Webserver ausfegührt werden, nur für localhost.

      Kommentar


      • #4
        PHP-Code:
        if (php_sapi_name() != 'cli') {
            die();


        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Hallo,

          vielen Dank für die sehr interessanten Antworten!

          @Shurakai:
          Genau so eine Sicherheitslücke meinte ich. Kann das Output Buffering global in der PHP.INI festgelegt werden? Dann würde ich in diesem Fall in Zukunft kein headers_sent() mehr nutzen.

          @prego:
          Klar, das ist natürlich immer noch das Sicherste und in der Regel mache ich das auch so. Aber in einigen Fällen ist dies bei mir nicht möglich.

          ghostgambler:
          Perfekt! Danke, diese Funktion löst mein headers_sent problemlos ab!

          Kommentar


          • #6
            Original geschrieben von Saskia
            Kann das Output Buffering global in der PHP.INI festgelegt werden?
            ja

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar

            Lädt...
            X