มาบวกเลขป้องกัน spam จาก comment (หรืออื่น ๆ ) กันดีกว่าดีกว่า (ใน PHP)

เริ่มแรกง่าย ๆ เลย สุ่มตัวเลขสัก 2 ตัวก่อน แล้วเก็บลง Session ไว้ซะ

session_start();
// เริ่มสร้างตัวเลขสุ่มไว้สองตัว
$_SESSION['rand_x'] = rand(1, 9);
$_SESSION['rand_y'] = rand(1, 9);
// จบการสร้างตัวเลขสุ่ม

แล้วก็เอาค่าที่ได้ไปแสดง แล้วก็ให้กรอกผลของการบวก

<!-- เริ่มส่วนของการบวกเลข -->
กรุณาบวกเลขต่อไปนี้
<?php echo $_SESSION['rand_x']; ?> + <?php echo $_SESSION['rand_y']; ?> = <input type="text" name="rand_ans" size="10">
<!-- จบส่วนของการบวกเลข -->

โค้ดด้านบนก็เอาไปใส่ใน form เพื่อให้เอาคำตอบให้มันส่งค่าไปยังปลายทาง

ส่วนปลายทางที่รับค่าจาก form ซึ่งก่อนทำเรื่องอื่น ๆ ก็เช็คก่อนเลยว่า บวกเลขมาถูกต้องหรือเปล่า โดยเอาค่าที่อยู่ใน session มาบวกและเืทียบค่ามันซะ ถ้าใช่ก็ปล่อยไปทำอย่างอื่น ถ้าไม่ใช่ก็ die มัน หรือจะทำอะไรต่อก็สุดแล้วแต่ครับ

session_start();
// เริ่มตรวจสอบการบวกเลข
if(($_SESSION['rand_x'] + $_SESSION['rand_y']) != $_POST['rand_ans']) {
die("คุณบวกเลขผิด");
}
// จบการตรวจสอบการบวกเลข

แค่นี้ก็พอกัน comment ที่มา spam ได้ อาจจะปรับเปลี่ยนรูปแบบการแสดงผล หรือตำแหน่งในการวาง input form ต่าง ๆ ได้ตามความเหมาะสม หรือจะสุ่มตำแหน่งก็ได้ เพื่อป้องกัน bot ที่สามารถปรับตัวได้ตามลักษณะของการบวกเลขแบบนี้ครับ ซึ่งการ ทำระบบบวกเลขนี้ก็คล้าย ๆ กับการทำ captcha แหละครับ แต่อันนี้จะง่ายและไม่ซับซ้อนมากเท่าครับ

โดยตัวแนวคิดได้มาจากแนวคิดของ Match Captcha ของ Drupal แหละครับ

10 thoughts on “มาบวกเลขป้องกัน spam จาก comment (หรืออื่น ๆ ) กันดีกว่าดีกว่า (ใน PHP)”

  1. Priesdelly — ก็เพิ่มตัวแปรสำหรับให้มันสุ่ม +, – , * แล้วก็ / ครับ แล้วก็เข้าไป random ออกค่าพวกนี้มาอีกใส่ลงใน session เวลาคำนวณก็ไปดึงมาทำ if-else แล้วก็คำนวณตามที่มันสุ่มในตัวแปรเท่านั้นเองครับ ไม่ยากครับผม

  2. ขอบคุณมากครับ สั้น กระชับ ใัช้งานได้จริง ^^

  3. แบบนี้ถ้าเกิดว่าเปิดหน้าที่มีช่องให้ comment พร้อมกันทีละหลายๆ หน้า
    ก็จะใช้ได้กับเฉพาะหน้าที่เปิดเป็นลำดับสุดท้ายสิครับ

  4. pittaya – ใช่ครับ อันนี้ผมเขียนแบบลวกสุด ๆ แล้วก็เบื้องต้นสุด ๆ ครับ ไม่ได้มีการทำ timer ไว้เพื่อเช็คว่าจะให้เปลี่ยนค่ากี่นาทีครั้งอะไรแบบนี้ หรือเช็คว่ามีค่าอยู่หรือเปล่าครับ เอาไว้เป็นแนวทางพัฒนากันต่อไปครับผม

    ซึ่งถ้ามีเวลาจะเอาเขียนเพิ่มเติมที่ใช้ได้หลากหลาย และหลากรูปแบบให้ดูกันครับ

  5. ถ้าเป็น bot เข้ามาแกะสมการ แล้วเอาค่าไปเข้า eval() function ก็สามารถถอดได้แล้ว
    แสดงว่าใช้ captcha น่าจะโอเคกว่าอยู่แล้วหรือเปล่าครับ

  6. devspy – ก่อนจะเอา bot มาแกะสมการออกมาเนี่ยคงต้องไล่ทำ parser มันออกมาเป็น สมการเพื่อใส่ใน eval ก่อนหล่ะมั้งครับ ซึ่งเราก็สามารถทำ random ตัว pattern ส่วนของการแจ้งตรงพื้นที่บวกเลขให้มัน dynamic สลับไปมาได้อีก แบบเดียวกับ captcha ครับ ซึ่งอันนี้มันขึ้นอยู่กับว่าจะมีความบ้าพลังในการ random มากน้อยแค่ไหนครับ

  7. คือว่าผมเอาโค้ดไปวางไม่ถูกอะครับ วางยังไงตรงไหนหรอครับ บอกหน่อยครับ

    ขอบคุณคร้าบ

Comments are closed.

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว

Privacy Preferences

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

Allow All
Manage Consent Preferences
  • Always Active

Save