2010-12-27 11 views
0

Mit meiner Datendateien wollte ich mit Websites verwenden ich gehören in der Regel einige PHP-Code in ihnen, sie zu verhindern direkt zugegriffen wird, wie unten ..Mit file_get_contents() auf Dateien - PHP-Code nicht

<?php 

if (defined("VALID")) { 

?> 

    html code here 

<?php 

} else { 

    die('Restricted Access.'); 

} 

?> 

Jetzt funktioniert das gut, wenn ich ein einfaches Include mache ..... aber ich benutze eine dieser Dateien, um einige Ersetzungen in & zu machen, daher muss file_get_contents(); Aber wenn ich das benutze, bekomme ich nicht nur den HTML-Code, ich bekomme natürlich auch den PHP-Code, der damit zurückgegeben wird ... das endet in der Quelle, die ich NICHT will.

Gibt es einen Weg um dies zu umgehen? Vielleicht den PHP-Code strippen? Irgendwelche besseren Möglichkeiten/Vorschläge?

+0

Constant checks und die die() sind nicht sehr sinnvoll und weisen auf einen schlechten Sicherheitsansatz hin. Wenn es sich nur um Datendateien handelt, legen Sie sie einfach in ein separates Verzeichnis und blockieren Sie den Fernzugriff mit 'Allow/Deny' in' .htaccess'. – mario

+0

Könnten Sie bitte erläutern, wie sie einen schlechten Sicherheitsansatz darstellen? Der Hauptpunkt der Übung ist die Sicherheit zu erhöhen ... & die Dateien sind in einem separaten Verzeichnis. – Brett

Antwort

2

Wenn Sie eine Ausgabe eines Skripts ersetzen wollen, versuchen Sie es mit Ausgabepufferung.

Statt file_get_contents('your-php-script.php') dies zu tun:

ob_start(); 
include('your-php-script.php'); 
$contents = ob_get_clean(); 

// do your replacements on a $contents 
+0

Das ist eine tolle Idee .... vielen Dank! – Brett

0

Warum verwenden Sie eine Hash-Zeichenfolge in einem Session-Cookie, um es zu überprüfen? Ich denke, es ist die beste Lösung. Fügen Sie dem Cookie also einen Hash-Wert hinzu, und prüfen Sie, ob dieser Wert in der Datei vorhanden ist, die Sie überprüfen müssen, ob sie gültig ist und voila!

Hoffe es hilft!

+0

Gut Cookies sind nicht 100% die ganze Zeit verfügbar, so kann nicht wirklich darauf verlassen. :( – Brett

1
echo preg_replace("~<\?php(.*?)\?>~", "", $contents); 

Diese Arbeit sollte den PHP-Code in der Datei zu löschen.

+0

Vielen Dank! – Brett

Verwandte Themen