Q Anda datang dalam dua bagian, baik solusi jeroen dan anubhava bekerja untuk bagian I - menolak akses ke / termasuk. anubhava juga berfungsi untuk bagian II. Saya lebih suka yang terakhir karena saya DOCROOT/.htaccess
tetap menggunakan dan ini menjaga semua kontrol tersebut dalam satu file.
Namun yang ingin saya diskusikan adalah konsep "menolak akses ke submit.php
". Jika Anda tidak ingin menggunakan submit.php
lalu mengapa harus di DOCROOT? Saya menduga bahwa jawabannya di sini adalah Anda menggunakannya sebagai target tindakan dalam beberapa bentuk dan hanya ingin dipecat ketika formulir dikirimkan dan tidak secara langsung, misalnya dari spambot.
Jika ini benar maka Anda tidak dapat menggunakan bagian II anubhava karena ini akan menyebabkan formulir Anda gagal. Yang dapat Anda lakukan di sini adalah (i) dengan .htaccess
cek untuk memastikan bahwa pengarah adalah halaman indeks Anda sendiri:
RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php [NC]
RewriteRule ^submit\.php$ - [F]
Dan (ii) dalam generator form index.php PHP Anda menyertakan beberapa bidang tersembunyi untuk cap waktu dan validasi. Validasi dapat berupa, katakanlah, 10 karakter pertama dari MD5 cap waktu dan beberapa rahasia internal. Saat memproses kiriman, Anda dapat (i) memvalidasi cap waktu dan validasi, dan (ii) cap waktu berada dalam, katakanlah, 15 menit dari waktu saat ini.
Ini Anda dapat mencegah spamming sebagai satu-satunya cara praktis bahwa seorang spammer bisa mendapatkan timestamp / pasangan validasi yang valid adalah dengan mem-parsing formulir, tetapi goresan ini hanya akan memiliki waktu 15 menit.