Ihr Q besteht aus zwei Teilen: Die Lösungen von Jeroen und Anubhava funktionieren für Teil I - Verweigern des Zugriffs auf / Includes. Anubhava funktioniert auch für Teil II. Ich bevorzuge letzteres, weil ich DOCROOT/.htaccess
sowieso ein benutze und dies alle diese Kontrolle in einer Datei behält.
Was ich jedoch nicht diskutieren wollte, ist das Konzept "Zugang verweigern submit.php
". Wenn Sie nicht verwenden möchtensubmit.php
warum haben Sie es dann überhaupt in DOCROOT? Ich vermute, dass die Antwort hier lautet, dass Sie es in einigen Formularen als Aktionsziel verwenden und möchten, dass es nur ausgelöst wird, wenn das Formular gesendet wird und nicht direkt, z. B. von einem Spambot.
Wenn dies zutrifft, können Sie Anubhavas Teil II nicht verwenden, da dies dazu führt, dass Ihr Formular fehlschlägt. Was Sie hier tun können, ist (i) mit der .htaccess
Überprüfung, um sicherzustellen, dass der Referrer Ihre eigene Indexseite war:
RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php [NC]
RewriteRule ^submit\.php$ - [F]
Und (ii) in Ihrem PHP index.php Formulargenerator einige versteckte Felder für einen Zeitstempel und eine Validierung enthalten. Die Validierung könnte beispielsweise die ersten 10 Zeichen eines MD5 des Zeitstempels und ein internes Geheimnis sein. Bei der Verarbeitung der Übermittlung können Sie dann (i) überprüfen, ob der Zeitstempel und die Validierung übereinstimmen, und (ii) der Zeitstempel liegt beispielsweise innerhalb von 15 Minuten nach der aktuellen Zeit.
Auf diese Weise können Sie Spam verhindern, da der einzige praktische Weg, auf dem ein Spammer ein gültiges Zeitstempel / Validierungspaar erhalten kann, darin besteht, ein Formular zu analysieren. Dieser Scrape hat jedoch nur eine Lebensdauer von 15 Minuten.