Google reCAPTCHA v2

CAPTCHA คือ

CAPTCHAarrow-up-right สำหรับ web developer หลายๆ คนคงรู้ความหมายอยู่แล้ว ผมขอสรุปสั่นๆ แล้วกันครับ

CAPTCHA คือเครื่องมือช่วยป้องกัน spam หรือ bot ของ website ครับ ซึ่งไม่นานมานี้ Google ได้พัฒนา reCAPTCHA ให้ใช้งานได้ง่ายขึ้น(จริงข่าวออกมาซักพักละ) โดย reCAPTCHA version ใหม่ตัวนี้ผู้ใช้ไม่จำเป็นต้องพิมพ์ตัวอักษรตามที่เห็นอีกต่อไป เปลี่ยนเป็นการติ๊กถูกว่าเราไม่ใช้ bot ซึ่งการตรวจสอบนั้นทาง Google จะประเมินความเสี่ยงและแยกแยะเองว่าเป็นมนุษย์จริงๆ หรือไม แต่ถึงอย่างนั้นหากระบบไม่สามารถแยกแยะได้ว่าเป็นมนุษย์หรือ bot ระบบก็จะแสดงตัวอักษรมาให้พิมพ์ตามเดิม ดูแล้วน่าจะสะดวกกับผู้ใช้มากขึ้น

สมัครใช้ reCAPTCHA v2

การใช้งาน reCAPTCHA ของ Google นั้นต้อง register ก่อนนะครับเพื่อขอรับ Site Key และ Secret Key ในการนำไปใช้ วิธีการนั้นก็ง่ายๆ ครับตามนี้เลย

1. เข้าไปยังเว็บ https://www.google.com/recaptcha/about/arrow-up-right

2. Login เข้าใช้งานด้วย Gmail account ที่ต้องการ

3. คลิกที่ปุ่ม

4. คลิกที่ปุ่ม + ด้านขวา หรือกด link 👉https://www.google.com/recaptcha/admin/createarrow-up-right

5. กรอกข้อมูลลงไปตามรายละเอียดที่เราจะใช้งาน เพื่อให้ได้

circle-info

กรณีต้องการ Test เราจำเป็นต้องมี domain จริงๆ ด้วยนะครับ ใช้ localhost ไม่ได้นะ

6. ติ๊กยอมครับ Accept the reCAPTCHA Terms of Service แล้วคลิก "Submit"

7. จากนั้นเราจะได้ Key มา 2 ตัว คือ

  • Site key ตัวนี้เราจะ copy และนำไปใช้ที่ client side (html เรา)

  • Secret key ตัวนี้เราจะ copy และนำไปใช้ก server side (ในตัวอย่างนี้คือ python เรา)

8. ทุกอย่างที่ต้องเตรียมเรียบร้อย เริ่ม coding กันเลย

เริ่ม coding กันเลย

ตัวอย่างนี้จะใช้ python Flask ดูแลในส่วน server side และมี page เดียวเลยคือ index.html ง่ายๆ ไป

เริ่มจาก index.html จุดสำคัญเลยคือ

  • line ที่ 8 เราต้องเพิ่ม lib ของ google recaptcha

  • line ที่ 16 สำหรับแสดง reCAPTCHA ให้ user บอกว่าตัวเองนั้นไม่ใช่ bot นะ (อย่าลืม replace site key เป็นของคุณเองก่อน test นะ)

  • line 25 default เมื่อเปิด web เราแล้วหาก user ยังไม่ได้ verify ว่าเป็น bot หรือไมก็ควรจะยัง submit อะไรไม่ได้นะ

success.html

fail.html

ต่อด้วย main.py เราได้เพิ่ม reCAPTCHA ใน client side แล้ว แต่จะ verify แค่ client side อย่างเดียวนั้นไม่รอดแน่นอน เดี๋ยวนี้ทุก web broswer มี dev tool เทพๆ เยอะแยะ ดังนั้นเราควร verify ที่ server side ด้วยดีที่สุด

  • route 1 เมื่อเปิด web ด้วย url localhost:5000 จะ render index.html ขึ้นมา

  • route 2 (/verify) method POST เพื่อคลิก Verify จาก index.html จะเข้า route นี้ หากทำงานถูกต้องเราควรได้ reCAPTCHA token จาก client side มาด้วย จากนั้นเราจะนำ token ที่ได้ไป verify กับ google โดยตรงอีกครั้ง (line 14 - 22) หากได้ response กลับมาและมี value success เป็น True เราจะได้สรุปได้ว่า user ที่คลิก Verify มานั้นไม่ใช่ Bot แน่นอนครับ 🎉

Example code

👉 https://github.com/nottfree/google-recaptchaarrow-up-right

Reference

Last updated