2012-03-27 12 views
2

Ich weiß, es gibt ähnliche Beiträge zu diesem Thema, aber seien Sie versichert, dies ist kein doppelter Beitrag!Wie sichert man die PHP-Datei nur für Cron-Aufgaben?

Ich habe eine Website auf einem godaddy Server. Ich habe keinen Zugriff auf die Außenseite des Stamms meines Servers (alles ist öffentlich).

Ich habe eine Datei delete.php, die auf CRON und nur von CRON ausgeführt werden muss. Die Datei sollte aus irgendeinem Grund von niemandem manuell ausgeführt werden.

Angesichts der oben genannten, versuche ich, meine Datei so viel wie möglich zu sichern, also lasst uns dies ein Experiment in Sicherheit machen.

Bisher habe ich folgendes mit dem Ziel, die Datei so sicher wie möglich zu machen:

<?php 
$isCLI = (php_sapi_name() == 'cli'); 

if (!$isCLI) { 
    die("cannot run!"); 
} else { 
    if(!isset($_SERVER['REQUEST_METHOD'])){ 
     // Do the task here 
    }else{ 
     die("cannot run!"); 
    } 
} 
?> 

So wird diese logisch sicher? Wie kann es noch sicherer gemacht werden? godaddy kann mir nur erlauben, ein Datum/eine Zeit einzustellen, um eine Datei auszuführen, mehr nicht.

+2

Warum sind Ihre Cron-Skripte auch im Dokumentenstamm des Webservers? – ThiefMaster

+2

nur außerhalb der Web-Root. –

+2

Bitte lesen Sie Jungs. Ich habe keinen Zugriff auf die Außenseite meiner Wurzel. Mein gesamtes Verzeichnis ist öffentlich. Auch hier erlaubt godaddy KEINE Zugriffe nach außerhalb der Wurzel. – Sweepster

Antwort

5

Die Überprüfung auf cli SAPI ist ausreichend; Ein Benutzer, der es über Apache ausführt (sei es mod_php oder fastcgi oder cgi), wird niemals dazu führen, dass PHP über den CLI-sapi aufgerufen wird. Sie können die hässliche else {} um Ihren echten Code loswerden; Wenn Sie exit; am Ende der dann Block gibt es keinen Bedarf für eine sonst Block.

Allerdings würde diese Art von Skript in den Dokumentenstamm überhaupt nicht viel sauberer sein. Wenn das nicht möglich ist, sollten Sie auch .htaccess mit:

Order deny,allow 
Deny from all 

Wenn die Dateien in einem Ordner befinden, die vollständig sein sollte nicht gesperrt, wickeln Sie diese Zeilen in <Files whatever.php>...</Files>

+0

Ich stimme zu, dass es nicht sauberer ist, das Skript in root zu schreiben, aber wie ich schon sagte, das ist unmöglich mit godaddy. – Sweepster

+0

@ Jonathan: Das ist der Grund, warum ich meine Website letztes Jahr von GD übertragen habe :( –

1

Natürlich diese Dateien außerhalb der Platzierung Webroot wäre der bevorzugte Weg, dies zu tun. Auf der anderen Seite könnten Sie .htaccess erstellen, die Deny all Regel für alle Zugriffe definiert. Auf diese Weise verhindert Deny all direkten Serverzugriff, aber PHP CLI wäre immer noch in der Lage, darauf zuzugreifen.

+0

Können Sie näher erläutern, wie eine solche Zeile in meiner htaccess-Datei aussehen würde? – Sweepster

+1

Wenn sie in einem separaten Ordner sind: 'Order deny, allow 'und' leugnen von allem '. Wenn nicht, dann wickle diese zwei Zeilen in' ... ' – ThiefMaster

+0

Wäre CHMOD die Datei delete.php auf 644 wirksam? – Sweepster

Verwandte Themen