การใช้ CAPTCHA เพื่อป้องกัน Bot
ในบทที่แล้ว เราได้เรียนรู้เกี่ยวกับการป้องกัน Brute-Force Attack ซึ่งเป็นหนึ่งในภัยคุกคามที่พบบ่อยที่สุดในการพัฒนาเว็บแอปพลิเคชัน ในบทนี้ เราจะมาเรียนรู้วิธีการใช้ CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) เพื่อป้องกัน Bot จากการเข้าถึงหรือใช้งานฟังก์ชันต่างๆ บนเว็บไซต์ของเรา
CAPTCHA คืออะไร และทำไมถึงสำคัญ?
CAPTCHA เป็นกลไกที่ใช้ในการแยกแยะระหว่างผู้ใช้งานที่เป็นมนุษย์และโปรแกรมอัตโนมัติ (Bot) โดยทั่วไปแล้ว CAPTCHA จะแสดงภาพหรือข้อความที่บิดเบือน และให้ผู้ใช้งานป้อนข้อความที่เห็นลงในช่องข้อความ หากผู้ใช้งานป้อนข้อความถูกต้อง แสดงว่าผู้ใช้งานน่าจะเป็นมนุษย์ ไม่ใช่ Bot
การใช้ CAPTCHA มีความสำคัญอย่างยิ่งในการป้องกัน:
- การสร้างบัญชีปลอม: Bot มักถูกใช้เพื่อสร้างบัญชีปลอมจำนวนมาก ซึ่งอาจนำไปสู่การสแปมหรือการใช้งานที่ไม่เหมาะสมอื่นๆ
- การส่งแบบฟอร์มอัตโนมัติ: Bot สามารถส่งแบบฟอร์มต่างๆ บนเว็บไซต์ของเราได้โดยอัตโนมัติ เช่น แบบฟอร์มติดต่อ หรือแบบฟอร์มสมัครสมาชิก ซึ่งอาจทำให้เกิดการรบกวนหรือการใช้ทรัพยากรของเซิร์ฟเวอร์มากเกินไป
- การโจมตี Brute-Force: แม้ว่า CAPTCHA จะไม่ได้ออกแบบมาเพื่อป้องกัน Brute-Force โดยตรง แต่ก็สามารถช่วยลดประสิทธิภาพของ Bot ในการพยายามเดารหัสผ่านได้
ประเภทของ CAPTCHA
มี CAPTCHA หลายประเภทให้เลือกใช้งาน แต่ละประเภทก็มีข้อดีข้อเสียแตกต่างกันไป ตัวอย่างเช่น:
- Text-based CAPTCHA: เป็น CAPTCHA ที่เก่าแก่ที่สุด โดยจะแสดงภาพหรือข้อความที่บิดเบือน และให้ผู้ใช้งานป้อนข้อความที่เห็น ปัญหาของ CAPTCHA ประเภทนี้คือ Bot เริ่มฉลาดขึ้นและสามารถแก้ CAPTCHA เหล่านี้ได้ง่ายขึ้น
- Image-based CAPTCHA: จะแสดงภาพหลายภาพ และให้ผู้ใช้งานเลือกภาพที่ตรงกับคำอธิบายที่กำหนด เช่น "เลือกภาพที่มีรถยนต์" CAPTCHA ประเภทนี้มีความปลอดภัยมากกว่า Text-based CAPTCHA แต่ก็อาจทำให้ผู้ใช้งานบางรายรู้สึกไม่สะดวก
- Audio CAPTCHA: จะให้ผู้ใช้งานฟังเสียงที่บิดเบือน และให้ผู้ใช้งานป้อนข้อความที่ได้ยิน CAPTCHA ประเภทนี้มีประโยชน์สำหรับผู้ที่มีปัญหาด้านการมองเห็น
- reCAPTCHA (Google): เป็น CAPTCHA ที่ได้รับความนิยมมากที่สุด โดยจะใช้เทคนิคขั้นสูงในการแยกแยะระหว่างมนุษย์และ Bot reCAPTCHA เวอร์ชั่นใหม่ๆ มักจะขอให้ผู้ใช้งานคลิกที่ช่อง "ฉันไม่ใช่โปรแกรมอัตโนมัติ" เท่านั้น (No CAPTCHA reCAPTCHA) หรืออาจจะไม่ต้องทำอะไรเลย หาก Google มั่นใจว่าผู้ใช้งานเป็นมนุษย์จริงๆ
เหตุผลเชิงออกแบบ: การเลือกประเภทของ CAPTCHA ควรพิจารณาถึงความปลอดภัย, ความสะดวกในการใช้งาน และกลุ่มเป้าหมายของผู้ใช้งาน หากต้องการความปลอดภัยสูงสุด อาจต้องใช้ CAPTCHA ที่ซับซ้อนกว่า แต่ก็อาจทำให้ผู้ใช้งานบางรายรู้สึกไม่สะดวก ดังนั้นจึงต้องพิจารณา Trade-off อย่างรอบคอบ
การติดตั้ง CAPTCHA Library
ในการใช้งาน CAPTCHA ใน PHP เราสามารถใช้ Library ที่มีอยู่มากมายได้ ตัวอย่างเช่น:
- Securimage: เป็น Library ฟรีที่สามารถสร้าง Text-based CAPTCHA ได้อย่างง่ายดาย
- Gregwar Captcha: เป็น Library ที่ยืดหยุ่นและสามารถปรับแต่งได้สูง
- reCAPTCHA (Google): หากต้องการใช้ reCAPTCHA ของ Google จะต้องลงทะเบียนเว็บไซต์ของคุณกับ Google และรับ Site Key และ Secret Key
ในตัวอย่างนี้ เราจะใช้ reCAPTCHA ของ Google เนื่องจากเป็น CAPTCHA ที่ได้รับความนิยมและมีความปลอดภัยสูง
ขั้นตอนการติดตั้ง reCAPTCHA:
- ไปที่ Google reCAPTCHA admin console
- ลงทะเบียนเว็บไซต์ของคุณ
- เลือกประเภทของ reCAPTCHA (reCAPTCHA v2 หรือ reCAPTCHA v3)
- รับ Site Key และ Secret Key
การใช้งาน CAPTCHA ใน Form
เมื่อเราได้ Site Key และ Secret Key แล้ว เราก็สามารถนำ reCAPTCHA ไปใช้งานใน Form ของเราได้
ตัวอย่างโค้ด HTML:
<form action="process.php" method="post">
<label for="name">Name:</label><br>
<input type="text" id="name" name="name"><br><br>
<label for="email">Email:</label><br>
<input type="email" id="email" name="email"><br><br>
<div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div><br>
<input type="submit" value="Submit">
</form>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
คำอธิบาย:
- เราเพิ่ม `<div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>` ลงใน Form ของเรา โดยแทนที่ `YOUR_SITE_KEY` ด้วย Site Key ที่เราได้รับจาก Google
- เราเพิ่ม `