Q ของคุณแบ่งออกเป็นสองส่วนทั้งโซลูชันของ jeroen และ anubhava ทำงานสำหรับส่วนที่ I - ปฏิเสธการเข้าถึง / รวม anubhava ยังใช้งานได้กับส่วนที่ II ฉันชอบอย่างหลังเพราะฉันใช้DOCROOT/.htaccess
อยู่แล้วและสิ่งนี้ทำให้การควบคุมดังกล่าวทั้งหมดอยู่ในไฟล์เดียว
อย่างไรก็ตามสิ่งที่ฉันไม่ต้องการพูดคุยคือแนวคิดของ "การปฏิเสธการเข้าถึงsubmit.php
" ถ้าคุณไม่ต้องการใช้submit.php
แล้วทำไมต้องมีใน DOCROOT เลย? ฉันสงสัยว่าคำตอบที่นี่คือคุณใช้เป็นเป้าหมายการดำเนินการในบางรูปแบบและต้องการให้ยิงเมื่อส่งแบบฟอร์มเท่านั้นไม่ใช่โดยตรงเช่นจากสแปมบอท
หากเป็นจริงคุณจะไม่สามารถใช้ส่วน II ของ anubhava ได้เนื่องจากจะทำให้แบบฟอร์มของคุณล้มเหลว สิ่งที่คุณทำได้คือ (i) ด้วยการ.htaccess
ตรวจสอบเพื่อให้แน่ใจว่าผู้อ้างอิงคือหน้าดัชนีของคุณเอง:
RewriteCond %{HTTP_REFERRER} !=HTTP:
RewriteRule ^submit\.php$ - [F]
และ (ii) ภายในตัวสร้างฟอร์ม PHP index.php ของคุณมีฟิลด์ที่ซ่อนอยู่สำหรับการประทับเวลาและการตรวจสอบความถูกต้อง การตรวจสอบความถูกต้องอาจเป็นอักขระ 10 ตัวแรกของ MD5 ของการประทับเวลาและความลับภายใน ในการประมวลผลการส่งคุณสามารถ (i) ตรวจสอบความถูกต้องว่าการประทับเวลาและการตรวจสอบความถูกต้องตรงกันและ (ii) การประทับเวลาอยู่ภายใน 15 นาทีของเวลาปัจจุบัน
วิธีนี้คุณสามารถป้องกันการส่งสแปมได้เป็นวิธีเดียวที่ผู้ส่งสแปมสามารถรับคู่การประทับเวลา / การตรวจสอบความถูกต้องได้คือการแยกวิเคราะห์แบบฟอร์ม แต่การขูดนี้จะมีอายุเพียง 15 นาที