Ich habe den folgenden Code in meiner .htaccess-Datei, um Anfragen an PHP-Dateien zu blockieren und die 404.php-Datei anzuzeigen.PHP-Dateien in Unterverzeichnisse umschreiben
RewriteCond %{REQUEST_URI} !(index|backup).php
RewriteCond %{REQUEST_URI} !^\/(dir1|dir1)\/
RewriteCond %{REQUEST_URI} !404.php
RewriteCond %{REQUEST_URI} .*\.php
RewriteRule .* 404.php [L]
Dies blockiert Anforderungen an alle PHP-Dateien mit Ausnahme von index.php, backup.php und alle Dateien in dir1 und dir2. Dies funktioniert für Anfragen an der Wurzel:
http://www.example.com/some-file.php
http://www.example.com/another-file.php
Aber es funktioniert nicht für Dateien in Unterverzeichnissen:
http://www.example.com/sub/some-file.php
http://www.example.com/sub/another-file.php
soll ich sagen, dass das Unterverzeichnis ‚sub‘ nicht wirklich existieren. Die Anfragen kommen von automatisierten Scannern, die nach Löchern in der Site suchen. Ich überschreibe die Anfragen zu 404.php, weil diese Datei die Datenbank oder irgendwelche der Anwendung nicht lädt. Wenn ich das nicht mache, wird stattdessen die vollständige Anwendung 404 geladen, was MySQL immer wieder zum Absturz bringt, wenn ich 100 dieser Anfragen pro Minute bekomme (mehrmals am Tag).
Meine Frage ist dann, wie kann ich den Code ändern, um für Unterverzeichnisse zu arbeiten? Ich dachte, dass die REQUEST_URI das vollständige Unterverzeichnis enthielt, damit der Code so funktionieren sollte wie er ist?
Dies funktioniert nicht, da die Verzeichnisse nicht wirklich existieren und alles so sein kann wie sie werden über automatisierte Exploit-Scanner angefordert. Ich habe keine spezifische Liste von zu blockierenden Verzeichnissen. Es ist für mich kein Problem, alle .php-Dateien zu blockieren, da die einzige gültige PHP-Datei auf dem Server index.php ist, die mit dieser Regel erlaubt ist. –