Logo Piases
WordPress แสดงรายชื่อ Users ทั้งหมดบน REST API

WordPress แสดงรายชื่อ Users ทั้งหมดบน REST API

January 5, 2025
2 min read
Table of Contents

รู้หรือไม่ว่า WordPress แสดงรายชื่อ Users ทั้งหมดที่มีอยู่ในเว็บไซต์บน REST API

โดยสามารถไปที่ URL ของ REST API ในส่วนของ users ได้ที่: โดเมนของคุณ/wp-json/wp/v2/users จะพบว่า REST API จะแสดงรายละเอียดทั้งหมดเกี่ยวกับ Users ที่มีอยู่ในเว็บไซต์ WordPress นั้น

ในกรณีนี้เราจะไปที่ REST API ของเว็บไซต์ของ Matt Mullenweg ผู้ที่เป็น Co-founder และ CEO ของ WordPress ที่หน้า https://ma.tt/wp-json/wp/v2/users

จะเห็นว่า REST API ในส่วนของ Users จะแสดง Username ทั้งหมดในเว็บไซต์ของ Matt ซึ่งมีอยู่ 4 Users

REST API Expose All Users in WordPress site

อะไรคือปัญหา REST API แสดง Users

ปัญหาหลักของการที่ REST API แสดง Users คือ การแสดง Usernames แบบสาธารณะ (ใช่แล้วคุณไม่ได้อ่านผิด)

หากจะให้ขยายความ การที่ Users ทั้งหมดถูกแสดงให้ใครก็ตามเห็น ทำให้โอกาสในการถูกโจมตีแบบ Brute Force (ทดลองเดารหัสผ่าน) ที่มีต่อเว็บไซต์ดังกล่าวเพิ่มสูงขึ้น ทั้งในแง่ของการตกเป็นเป้าหมายของการโจมตี และการถูกแอบ Login เข้ามา

ตามปกติ การจะ Login เข้าสู่เว็บไซต์ (หรือระบบอะไรก็ตาม) จะประกอบด้วย 2 ส่วนหลักอย่างที่ทุกคนน่าจะทราบอยู่แล้ว ได้แก่ Username และ Password ดังนั้นแล้วการทราบ Username จึงช่วยทุ่นเวลาไปได้มาก

ในทำนองเดียวกัน ผู้ไม่หวังดีที่ต้องการโจมตีก็จะสแกนหาเป้าหมายที่ทำข้อมูลบางส่วนหลุดออกสู่สาธารณะ ซึ่งเป็นเหตุผลว่าทำไมข้อมูลเหล่านี้เพิ่มโอกาสในการตกเป็นเป้าหมาย

แต่อย่างไรก็ตาม ทั้งหมดเป็นเพียงเรื่องของ “โอกาส” และไม่ได้อันตรายหรือถือว่าเป็นช่องโหว่ที่ร้ายแรง

วิธีป้องกันปัญหาเบื้องต้น

วิธีการป้องกันสิ่งที่เกิดขึ้นจากการที่ WordPress แสดงรายชื่อ Users ทั้งหมดที่มีอยู่ในเว็บไซต์บน REST API ในเบื้องต้นสามารถทำได้ 3 วิธี ได้แก่

1) ปิด REST API ซึ่งสามารถทำได้ด้วยการแก้ที่ Functions.php หรือใช้ Plugin โดยอาจค้นหาด้วยคำว่า “Disable REST API” แต่การปิด REST API ย่อมหมายถึงการที่คุณจะไม่สามารถใช้ REST API ได้ ซึ่งหมายถึง Plugin บางตัวอาจจะไม่สามารถใช้งานได้ รวมถึงการใช้ WordPress นั้นเป็น Headless CMS

2) ทำให้ข้อมูลในส่วน /users ต้องการ Authentication เพื่อไม่ให้เปิดเผยเป็นสาธารณะ เพราะปัญหาจริง ๆ แล้วข้อมูลในส่วนนี้ไม่ควรเปิดสาธารณะเป็น Default นั่นเอง ถ้าจำเป็นแนะนำให้ใช้ Plugin

3) เปลี่ยน user_nicename เพื่อป้องกันไม่ให้ slug ของ User ดังกล่าวแสดง username ที่แท้จริง เป็นวิธีที่ง่ายที่สุดในการซ่อน username จริงที่ใช้ในการ Login โดยสามารถเปลี่ยน user_nicename ได้โดยเข้า Database ผ่าน phpMyadmin เพื่อไปแก้ไขที่ wp_users ในส่วนของ user_nicename