การทำให้ MySQL แข็งแกร่งขึ้นสำหรับเว็บไซต์ WordPress ของคุณ

เผยแพร่แล้ว: 2023-01-18

WordPress ซึ่งเป็น CMS ที่ได้รับความนิยมสูงสุด ทำงานบน MySQL ซึ่งเป็นฐานข้อมูลที่ได้รับความนิยมสูงสุด การใช้เวลาสักครู่เพื่อให้แน่ใจว่าการติดตั้ง MySQL และการติดตั้งการกำหนดค่าฐานข้อมูล WordPress นั้นแข็งแกร่งเพียงพอต่อเวกเตอร์การโจมตีทั่วไปสามารถช่วยคุณลดความเสี่ยงได้ โดยเฉพาะอย่างยิ่งหากคุณจัดการเซิร์ฟเวอร์ MySQL ด้วยตัวเอง

เป็นที่น่าสังเกตว่าการติดตั้ง WordPress จำนวนมากใช้ MariaDB ซึ่งเป็นส่วนแยกของ MySQL เนื่องจากทั้งสองทำงานคล้ายกันมาก เราจะใช้ MySQL เพื่อหมายถึงทั้ง MySQL และ MariaDB ไม่ว่าคุณกำลังใช้งาน RDMS ในรูปแบบใด การทำให้ MySQL แข็งแกร่งขึ้นสามารถช่วยลดความเสี่ยงของการโจมตีจากแฮ็กเกอร์ได้ อย่างไรก็ตาม การดำเนินการนี้ไม่ได้แทนที่มาตรการรักษาความปลอดภัยอื่นๆ เช่น การติดตั้งไฟร์วอลล์ของเว็บแอปพลิเคชัน เพื่อให้มั่นใจว่าคุณมีปลั๊กอิน ธีม และ WordPress เวอร์ชันล่าสุด และทำให้ WordPress แข็งแกร่งขึ้น

โปรด ทราบ บทความนี้มีเป้าหมายที่ MySQL 8.0 ที่ทำงานบน Linux (Ubuntu) แม้ว่าแนวคิดจะแปลเป็นระบบปฏิบัติการอื่นและเวอร์ชัน MySQL/MariaDB คำสั่งและเส้นทางไฟล์ที่ใช้ในตัวอย่างเหล่านี้อาจแตกต่างกัน ก่อนทำการเปลี่ยนแปลงใด ๆ กับระบบการผลิต ขอแนะนำให้ทดสอบการเปลี่ยนแปลงใด ๆ ในสภาพแวดล้อมการจัดเตรียมหรือก่อนการผลิต

ในบทความนี้ ซึ่งมุ่งเป้าไปที่ผู้ที่จัดการ MYSQL ของตนเองเป็นหลัก เรามีเคล็ดลับและแบบฝึกหัดมากมายเกี่ยวกับวิธีรักษาความปลอดภัยของ MySQL ถึงกระนั้น รายการแนวปฏิบัติที่ดีที่สุดที่นำเสนอในบทความนี้ก็คุ้มค่าที่จะอ่านสำหรับใครก็ตามที่จัดการเว็บไซต์ WordPress การรักษาความปลอดภัยเซิร์ฟเวอร์ MySQL ของคุณเป็นขั้นตอนสำคัญในการรักษา WordPress ที่ปลอดภัย และปกป้องตัวคุณเองจากการโจมตีแบบเดรัจฉานประเภทต่างๆ การแทรกมัลแวร์ และการโจมตีประเภทอื่นๆ

สารบัญ

  • พิจารณาใช้ฐานข้อมูลเป็นบริการ (DBaaS
  • ปรับปรุง MySQL ให้ทันสมัยอยู่เสมอ
  • เรียกใช้ MySQL บนเครื่องเฉพาะ
  • ผูก MySQL กับที่อยู่ IP
  • จำกัดการใช้เครื่องมือ GUI บนเว็บ
  • เรียกใช้ MySQL daemon โดยใช้ผู้ใช้เฉพาะ
  • ใช้สคริปต์ mysql_secure_installation
  • สร้างผู้ใช้ฐานข้อมูล WordPress โดยเฉพาะ
  • ตรวจสอบให้แน่ใจว่า local_infile ถูกปิดใช้งาน
  • ปิดประวัติคำสั่ง MySQL
  • ตรวจสอบให้แน่ใจว่า mysqld ไม่ได้เริ่มต้นด้วยอาร์กิวเมนต์ –skip-grant-tables
  • สำรองฐานข้อมูลของคุณ
    • ทำการสำรองข้อมูลบ่อยๆ
    • ตรวจสอบความสมบูรณ์ของข้อมูลสำรองของคุณบ่อยๆ
    • จัดเก็บข้อมูลสำรองของคุณอย่างปลอดภัย
  • เปิดใช้งานและบังคับใช้การเชื่อมต่อ TLS
    • เปลี่ยนคำนำหน้าตาราง
    • วิธีดำเนินการเปลี่ยนแปลง
    • รักษา WordPress ของคุณให้ปลอดภัย

พิจารณาใช้ฐานข้อมูลเป็นบริการ (DBaaS)

ฐานข้อมูลในฐานะบริการนั้นคุ้มค่าที่จะพิจารณาหากคุณไม่ได้โฮสต์ WordPress ในแผนการจัดการ แทนที่การติดตั้ง MySQL แบบโลคัลแบบเดิมด้วยบริการที่คุณเชื่อมต่อ สิ่งนี้อาจเหมาะกับกรณีการใช้งานของคุณ หากคุณใช้ไซต์ WordPress กับผู้ให้บริการโฮสติ้งที่ให้บริการฐานข้อมูลที่มีการจัดการ ตัวเลือกที่มีอยู่โดยทั่วไป ได้แก่ Amazon RDS, DigitalOcean Managed MySQL และ Linode Managed MySQL) บริการเหล่านี้อาจมีค่าใช้จ่ายสูงกว่าการเรียกใช้ MySQL ด้วยตัวเอง อย่างไรก็ตาม พวกเขาทำการยกระดับฐานข้อมูลที่ใช้งานจริงทั้งหมด บริการส่วนใหญ่รวมถึงแนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยที่ตั้งไว้ล่วงหน้า แพตช์และการบำรุงรักษาด้านความปลอดภัยอย่างต่อเนื่อง และการสำรองข้อมูล

การใช้ฐานข้อมูลเป็นบริการ (DBaaS) เป็นหนึ่งในตัวเลือกที่ดีที่สุดในแง่ของความปลอดภัยและความน่าเชื่อถือ แม้ว่าสิ่งนี้จะไม่บังคับ แต่ก็ยังเป็นสิ่งที่ดีที่จะมี อย่างไรก็ตาม หากคุณต้องการจัดการ MySQL ด้วยตัวคุณเอง ต่อไปนี้คือชุดเคล็ดลับการเสริมความแข็งแกร่งที่ควรคำนึงถึง

ปรับปรุง MySQL ให้ทันสมัยอยู่เสมอ

สิ่งสำคัญคือต้องแน่ใจว่าคุณใช้ WordPress เวอร์ชันล่าสุด การปรับปรุง MySQL ให้ทันสมัยอยู่เสมอก็สำคัญ เช่นเดียวกับซอฟต์แวร์อื่นๆ ส่วนใหญ่ การอัปเดตไปยังเซิร์ฟเวอร์ MySQL จะออกเป็นระยะๆ การอัปเดตเหล่านี้จะแก้ไขข้อบกพร่อง ลดช่องโหว่ และนำเสนอคุณสมบัติใหม่ คุณควรอัปเดต MySQL ด้วยแพตช์ความปลอดภัยล่าสุดเพื่อลดความเสี่ยงในการใช้งานซอฟต์แวร์ที่มีช่องโหว่ที่รู้จัก โปรดทราบว่าเมื่ออัปเดตแล้ว คุณจะต้องรีสตาร์ท 'mysql daemon' นี่เป็นกระบวนการที่อาจมีการหยุดทำงาน เช่นเคย วางแผนล่วงหน้า

เรียกใช้ MySQL บนเครื่องเฉพาะ

การติดตั้ง WordPress จำนวนมากเรียกใช้ MySQL, PHP และเว็บเซิร์ฟเวอร์ (เช่น Nginx หรือ Apache HTTP Server) ในเครื่องเดียวกัน สิ่งนี้ไม่เหมาะสม – ทั้งในแง่ของประสิทธิภาพและความปลอดภัย MySQL ควรทำงานบนเซิร์ฟเวอร์เฉพาะเพื่อลดรัศมีการระเบิดของการโจมตี หากผู้โจมตีจัดการเพื่อประนีประนอมและเพิ่มระดับสิทธิ์บนเว็บเซิร์ฟเวอร์ ผู้โจมตีรายนั้นก็จะย้ายไปด้านข้างได้ยากขึ้น และยังทำให้เซิร์ฟเวอร์ MySQL เสียหายด้วย

ผูก MySQL กับที่อยู่ IP

คุณสามารถกำหนดค่า MySQL ให้ยอมรับเฉพาะการเชื่อมต่อ TCP/IP จากอินเทอร์เฟซ IPv4 หรือ IPv6 เฉพาะ สิ่งที่คุณต้องทำคือตั้งค่าตัวเลือกการกำหนดค่าที่อยู่การโยงเป็นที่อยู่ IP เฉพาะ สิ่งนี้ให้การควบคุมและข้อจำกัดเพิ่มเติมเกี่ยวกับวิธีที่แอปพลิเคชันไคลเอนต์ (ในกรณีของเราคือ WordPress) สามารถเชื่อมต่อกับ MySQL ตามค่าเริ่มต้น การตั้งค่านี้ถูกกำหนดเป็น * หมายความว่า MySQL ที่พร้อมใช้งานจะรับฟังในทุกอินเทอร์เฟซ

หากไม่ได้กำหนดค่าให้รับฟัง IP เฉพาะ สามารถใช้ IP ทั้งหมดเพื่อเชื่อมต่อกับ MySQL การตั้งค่านี้มีความสำคัญเป็นพิเศษหากคุณใช้งาน MySQL บนเครื่องเดียวกันกับเว็บเซิร์ฟเวอร์ที่คุณเปิดเผยต่ออินเทอร์เน็ต (ในกรณีนี้ คุณควรตั้งค่า bind-address เป็น 127.0.0.1 ดังนั้น MySQL จะฟังเฉพาะบน localhost เท่านั้น) .

ตัวอย่างเช่น หากคุณต้องการให้เซิร์ฟเวอร์ MySQL ยอมรับเฉพาะการเชื่อมต่อบนที่อยู่ IPv4 ที่ระบุ คุณสามารถเพิ่มรายการที่คล้ายกับตัวอย่างด้านล่าง คุณควรป้อนข้อมูลนี้ภายใต้กลุ่มตัวเลือก [mysqld] ในไฟล์การกำหนดค่า /etc/mysql/mysql.conf.d/mysqld.cnf ของเซิร์ฟเวอร์ของคุณ

ที่อยู่การผูก = 192.168.0.24

โปรดทราบว่าเมื่อคุณตั้งค่านี้แล้ว คุณจะต้องกำหนดค่า WordPress ใหม่เพื่อเชื่อมต่อกับฐานข้อมูลโดยใช้ที่อยู่ IP นี้ (เว้นแต่จะทำเช่นนั้นอยู่แล้ว) เนื่องจากจะไม่อนุญาตให้เชื่อมต่อกับที่อยู่โฮสต์เซิร์ฟเวอร์อื่น

จำกัดการใช้เครื่องมือ GUI บนเว็บ

การติดตั้ง WordPress จำนวนมากมีเครื่องมือจัดการกราฟิกส่วนหน้าบนเว็บ ตัวอย่างทั่วไป ได้แก่ Cpanel, phpMyAdmin หรือ Adminer เครื่องมือเหล่านี้ช่วยให้จัดการ MySQL และด้านอื่นๆ ของโครงสร้างพื้นฐานได้ง่ายขึ้น แม้ว่าอินเทอร์เฟซแบบกราฟิกบนเว็บสามารถช่วยคุณจัดการฐานข้อมูล MySQL ได้ แต่อินเทอร์เฟซเหล่านี้สามารถเพิ่มพื้นผิวการโจมตีโดยการเพิ่มเวกเตอร์อื่น นอกจากนี้ยังมีความเสี่ยงที่จะถูกค้นพบและใช้งานโดยผู้โจมตีเพื่อรันการสืบค้น SQL ที่ทำลายล้างหรือเป็นอันตรายกับฐานข้อมูลของคุณ การโจมตีอาจส่งผลให้เว็บไซต์ WordPress ของคุณถูกยึดทั้งหมด

เซิร์ฟเวอร์เดียวที่ปลอดภัยคือเซิร์ฟเวอร์ที่ปิดและถอดปลั๊ก – อย่างไรก็ตาม ความเสี่ยงสามารถจัดการได้ การถอนการติดตั้งระบบที่ไม่สำคัญเป็นทางเลือกหนึ่ง อย่างไรก็ตาม สิ่งเหล่านี้สามารถล็อคและจำกัดเพื่อลดความเสี่ยง

คุณสามารถจำกัดการเข้าถึงเครื่องมือเหล่านี้ได้หลายวิธี คุณสามารถติดตั้ง phpMyAdmin สำหรับ WordPress จากระยะไกลได้ ซึ่งจะช่วยลดความเสี่ยงต่อเว็บเซิร์ฟเวอร์ อีกทางหนึ่ง คุณอาจต้องการพิจารณาใช้เครื่องมือต่างๆ เช่น MySQL Workbench หรือ Beekeeper Studio บนเครื่องท้องถิ่นของคุณและเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูลของคุณผ่านอุโมงค์ SSH

เรียกใช้ MySQL daemon โดยใช้ผู้ใช้เฉพาะ

เช่นเดียวกับบริการอื่นๆ ที่ทำงานบนเซิร์ฟเวอร์ คุณสามารถเรียกใช้ MySQL daemon ภายใต้ผู้ใช้เฉพาะ เมื่อคุณเรียกใช้ MySQL โดยใช้ผู้ใช้เฉพาะ คุณสามารถกำหนดสิทธิ์ที่ผู้ใช้ได้รับภายในระบบได้อย่างแม่นยำ การเรียกใช้ MySQL ภายใต้ผู้ใช้เฉพาะยังเป็นไปตามหลักการของสิทธิ์ขั้นต่ำ เนื่องจากวิธีนี้จะลดรัศมีการระเบิดของช่องโหว่ MySQL นอกจากนี้ยังลดความเป็นไปได้ที่การกำหนดค่าผิดพลาดจะถูกเอาเปรียบ เนื่องจากผู้ใช้ที่ถูกจำกัดจะไม่สามารถเข้าถึงทรัพยากรที่ไม่เกี่ยวข้องกับ MySQL ได้ (เช่น การกำหนดค่าและความลับของระบบปฏิบัติการ)

ข่าวดีก็คือการติดตั้งผ่านตัวจัดการแพ็คเกจ (เช่น apt หรือ yum) จะดูแลขั้นตอนนี้โดยอัตโนมัติเมื่อติดตั้ง MySQL วิธีที่รวดเร็วในการตรวจสอบว่า MySQL ทำงานภายใต้ผู้ใช้เฉพาะหรือไม่ ให้รันสิ่งต่อไปนี้บนเครื่องที่รัน MySQL daemon

ป.ล. -เอฟ | egrep “^mysql.*$”

หาก MySQL ทำงาน โดย ใช้ผู้ใช้เฉพาะ คุณควรจะเห็นอย่างน้อยหนึ่งบรรทัดจากเอาต์พุตของ ps ที่ส่งคืน

ใช้สคริปต์ mysql_secure_installation

แพ็คเกจเซิร์ฟเวอร์ mysql มาพร้อมกับยูทิลิตี้สคริปต์เชลล์ชื่อ mysql_secure_installation คุณสามารถใช้สคริปต์นี้เพื่อตั้งค่าจุดเริ่มต้นที่ปลอดภัยสำหรับเซิร์ฟเวอร์ MySQL ดังนั้นคุณควรเรียกใช้หลังจากติดตั้ง MySQL ใหม่ ยูทิลิตีนี้ช่วยคุณ:

  • ตั้งรหัสผ่านสำหรับบัญชีรูท
  • ลบบัญชี root ที่สามารถเข้าถึงได้จาก localhost ภายนอก
  • ลบบัญชีผู้ใช้ที่ไม่ระบุตัวตน
  • ลบฐานข้อมูลทดสอบ (ซึ่งโดยค่าเริ่มต้นสามารถเข้าถึงได้โดยผู้ใช้ที่ไม่ระบุตัวตน)

ในการเรียกใช้ mysql_secure_installation ให้รันคำสั่งต่อไปนี้:

sudo mysql_secure_installation

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

หลังจากที่คุณเปิดใช้งานปลั๊กอินตรวจสอบรหัสผ่านแล้ว สคริปต์จะขอให้คุณระบุนโยบายการตรวจสอบรหัสผ่าน ที่นี่ คุณควรเลือกนโยบายรหัสผ่านที่รัดกุม จากนั้นคุณจะถูกขอให้รีเซ็ตรหัสผ่านของผู้ใช้รูท

ถัดไป สคริปต์จะแจ้งให้คุณลบผู้ใช้ MySQL ที่ไม่ระบุตัวตน นี่เป็นสิ่งสำคัญในการลดโอกาสที่ผู้โจมตีจะเข้าถึงเซิร์ฟเวอร์ฐานข้อมูลโดยใช้ประโยชน์จากผู้ใช้ MySQL ที่ไม่ระบุตัวตน

พรอมต์ถัดไปจะถามคุณว่าคุณต้องการปิดใช้งานการเข้าสู่ระบบโดยใช้ผู้ใช้รูทหรือไม่ เมื่อตรวจสอบสิทธิ์ระยะไกลกับเซิร์ฟเวอร์ MySQL การพิสูจน์ตัวตนระยะไกลโดยใช้ผู้ใช้รูทเป็นสิ่งที่อันตรายและไม่ค่อยจำเป็น แต่คุณควรใช้ SSH บน MySQL และใช้ไคลเอนต์ MySQL บนเซิร์ฟเวอร์เพื่อรับรองความถูกต้องในฐานะผู้ใช้รูท หรือควรใช้อุโมงค์ SSH เพื่อส่งต่อพอร์ต MySQL ระยะไกลไปยังเครื่องโลคัลของคุณและเชื่อมต่อโดยใช้โลคัลไคลเอ็นต์

ถัดไป ระบบจะขอให้คุณลบฐานข้อมูลเริ่มต้น (หากมี) ที่ MySQL จัดส่งให้ นี่คือแนวทางปฏิบัติที่แนะนำสำหรับเซิร์ฟเวอร์ MySQL ที่ใช้งานจริง

ลบฐานข้อมูลเริ่มต้น

สุดท้าย ระบบจะถามคุณว่าต้องการโหลดตารางสิทธิ์ใหม่สำหรับการเปลี่ยนแปลงทั้งหมดที่ใช้เพื่อให้มีผลหรือไม่

สร้างผู้ใช้ฐานข้อมูล WordPress โดยเฉพาะ

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

แนวทางปฏิบัตินี้ควรขยายไปถึงการปรับใช้งานที่รันเว็บไซต์ WordPress หลายเว็บไซต์ — เว็บไซต์ WordPress แต่ละแห่งควรมีฐานข้อมูลเฉพาะของตนเองและผู้ใช้ MySQL สิ่งนี้ทำให้มั่นใจได้ว่าในเวลาใด ๆ ผู้ใช้หนึ่งรายสามารถเข้าถึงฐานข้อมูลได้ครั้งละหนึ่งฐานข้อมูล และผู้ใช้ไม่สามารถเข้าถึงฐานข้อมูลอื่นได้ หลีกเลี่ยงการเข้าถึงโดยไม่ได้รับอนุญาตและการละเมิดข้อมูล

คำสั่ง SQL ต่อไปนี้ (แทนที่ <host> และ <รหัสผ่าน> และ <ฐานข้อมูล> เพื่อให้เหมาะกับความต้องการของคุณ) สามารถใช้เพื่อสร้างผู้ใช้เฉพาะสำหรับเว็บไซต์ WordPress ของคุณและให้สิทธิ์สำหรับการใช้งานปกติ โปรดทราบว่าบางครั้งปลั๊กอิน WordPress ธีม และการอัปเดต WordPress อาจต้องการสิทธิ์เพิ่มเติมเพื่อให้ทำงานได้อย่างถูกต้อง (ดูคำแนะนำ WordPress อย่างเป็นทางการสำหรับข้อมูลเพิ่มเติม)

ตรวจสอบให้แน่ใจว่า local_infile ถูกปิดใช้งาน

คำสั่งโหลดข้อมูลช่วยให้คุณสามารถโหลดไฟล์ข้อมูลลงในตารางฐานข้อมูล ภายใต้เงื่อนไขเฉพาะนี้สามารถใช้ในทางที่ผิดเพื่ออ่านไฟล์จากเซิร์ฟเวอร์ MySQL ดังนั้น เว้นแต่คุณจะมีกรณีการใช้งานเฉพาะสำหรับสิ่งนี้ในไซต์ WordPress ของคุณ คุณควรปิดใช้งานคุณลักษณะนี้

หาก MySQL และเว็บเซิร์ฟเวอร์ทำงานบนเครื่องเดียวกัน อาจอนุญาตให้ผู้โจมตีใช้คำสั่ง LOAD DATA LOCAL เพื่ออ่านไฟล์โดยอำเภอใจซึ่งการประมวลผลของเว็บเซิร์ฟเวอร์มีสิทธิ์อ่าน สิ่งนี้ถือว่าผู้โจมตีมีความสามารถในการเรียกใช้คำสั่ง SQL โดยพลการกับ MySQL อาจเป็นกรณีที่มีช่องโหว่การฉีด SQL หรือผ่านการติดตั้งปลั๊กอิน WordPress ที่เป็นอันตราย นี่เป็นอีกเหตุผลหนึ่งที่ทำให้เว็บเซิร์ฟเวอร์และเซิร์ฟเวอร์ฐานข้อมูลแยกจากกัน

โดยค่าเริ่มต้น local_infile จะถูกปิดใช้งานใน MySQL 8.0 (ซึ่งเคยเปิดใช้งานโดยค่าเริ่มต้นใน MySQL เวอร์ชันก่อนหน้า) เพื่อป้องกันไม่ให้เซิร์ฟเวอร์ MySQL ยอมรับคำสั่ง LOAD DATA LOCAL ตรวจสอบให้แน่ใจว่า mysqld daemon เริ่มทำงานโดยปิดใช้งาน local_infile

ปิดประวัติคำสั่ง MySQL

บน Linux คำสั่งบันทึกไคลเอนต์ MySQL ที่ดำเนินการแบบโต้ตอบจะถูกบันทึกลงในไฟล์ประวัติ (โดยทั่วไปจะอยู่ใน $HOME/.mysql_history) ควรปิดการใช้งานประวัติคำสั่ง MySQL เนื่องจากจะลดโอกาสในการเปิดเผยข้อมูลที่ละเอียดอ่อน เช่น รหัสผ่าน คีย์เข้ารหัส หรือความลับอื่นๆ

ในการตรวจสอบว่าไม่มีไฟล์ .mysql_history ในระบบ ให้รันคำสั่งต่อไปนี้:

ค้นหา /home -name “.mysql_history”
ค้นหา /root -name “.mysql_history”

หากคำสั่งด้านบนแสดงเอาต์พุตใดๆ ให้ลบไฟล์ .mysql_history ใดๆ นอกจากนี้ คุณสามารถตั้งค่า $HOME/.mysql_history เป็น symlink เป็น /dev/null ได้ดังนี้:

ln -s /dev/null $HOME/.mysql_history

ตรวจสอบให้แน่ใจว่า mysqld ไม่ได้เริ่มต้นด้วยอาร์กิวเมนต์ –skip-grant-tables

หากรหัสผ่านรูทของ MySQL ถูกใส่ผิดที่ ซึ่งไม่ใช่วิธีการที่ต้องการ ผู้ดูแลระบบ MySQL บางรายอาจหันไปตั้งค่าให้ MySQL เริ่มด้วยอาร์กิวเมนต์ –skip-grant-tables เมื่อเริ่มต้น MySQL ด้วยพารามิเตอร์นี้ มันจะหลีกเลี่ยงการตรวจสอบตารางการให้สิทธิ์เมื่อไคลเอ็นต์เชื่อมต่อหรือเรียกใช้คิวรี ทำให้ทุกคน ทุกที่ (หากสามารถเข้าถึงฐานข้อมูลผ่านเครือข่าย) สามารถทำสิ่งใดก็ได้บนเซิร์ฟเวอร์ฐานข้อมูล

เพื่อให้แน่ใจว่า –skip-grant-tables ไม่ได้เปิดใช้งาน ให้เปิดไฟล์คอนฟิกูเรชัน /etc/mysql/mysql.conf.d/mysqld.cnf ของเซิร์ฟเวอร์ของคุณ และมองหา Skip-grant-tables ไม่ควรตั้งค่าหรือตั้งค่าเป็นข้าม-ให้สิทธิ์ตาราง = FALSE

สำรองฐานข้อมูลของคุณ

การสำรองฐานข้อมูล WordPress ของคุณเป็นสิ่งสำคัญอย่างยิ่งเพื่อให้สามารถกู้คืนได้ทันทีจากภัยพิบัติหรือการโจมตี แม้ว่าจะมีวิธีมากมายในการสำรองข้อมูลฐานข้อมูล WordPress ของคุณ – ตั้งแต่ปลั๊กอินและบริการสำรองข้อมูล WordPress ไปจนถึงสคริปต์พื้นบ้านที่ทำการดัมพ์ฐานข้อมูลเป็นระยะ ๆ – ต่อไปนี้เป็นเคล็ดลับสำคัญบางประการที่ควรคำนึงถึง

ทำการสำรองข้อมูลบ่อยๆ

การสำรองข้อมูลเป็นประจำนั้นค่อนข้างชัดเจนและอธิบายได้ในตัว — ยิ่งคุณสำรองฐานข้อมูลบ่อยเท่าใด การกู้คืนจากเหตุการณ์ข้อมูลสูญหายก็จะง่ายขึ้นเท่านั้น แม้ว่าความถี่ของการสำรองข้อมูลจะขึ้นอยู่กับประเภทของไซต์ WordPress ที่คุณใช้งานอยู่ แต่โดยทั่วไปแล้ว การสำรองข้อมูลทุกวันจะรองรับกรณีการใช้งานส่วนใหญ่ได้ดี

ตรวจสอบความสมบูรณ์ของข้อมูลสำรองของคุณบ่อยๆ

การสำรองข้อมูลของคุณจะมีประโยชน์ก็ต่อเมื่อใช้งานได้เท่านั้น และคุณอาจไม่ต้องการค้นหาในขณะที่คุณอยู่ท่ามกลางเหตุการณ์ที่พยายามกู้คืนข้อมูล การแก้ไขอย่างง่ายสำหรับสิ่งนี้คือการตรวจสอบบ่อยๆ ว่าการสำรองข้อมูลของคุณใช้งานได้จริงโดยทำการทดสอบการคืนค่าทุกครั้ง วิธีที่ดีในการทำเช่นนี้คือตั้งค่ากิจกรรมในปฏิทินทุกๆ 2-3 เดือนเพื่อผ่านขั้นตอนการกู้คืนเพื่อให้แน่ใจว่าข้อมูลสำรองของคุณยังคงทำงานตามที่คาดไว้ นอกจากนี้ การจัดทำเอกสารขั้นตอนการคืนค่าฐานข้อมูลยังเป็นความคิดที่ดี — ยิ่งต้องคาดเดาน้อยลงเมื่อตอบสนองต่อเหตุการณ์ใด ๆ ก็ยิ่งดีเท่านั้น

จัดเก็บข้อมูลสำรองของคุณอย่างปลอดภัย

อย่าสำรองข้อมูลไซต์ WordPress ของคุณบนเว็บหรือเซิร์ฟเวอร์ฐานข้อมูลของคุณ (โดยเฉพาะบนเว็บเซิร์ฟเวอร์ของคุณ) การสำรองข้อมูลเป็นสถานที่ที่ยอดเยี่ยมสำหรับผู้โจมตีในการดำดิ่งสู่ถังขยะ การจัดเก็บข้อมูลสำรองของคุณในตำแหน่งนอกสถานที่ที่ปลอดภัยเป็นสิ่งที่แนะนำเป็นอย่างยิ่ง หากคุณกำลังดัมพ์ฐานข้อมูลเป็นระยะ ให้พิจารณาจัดเก็บดัมพ์ฐานข้อมูลของคุณบนบริการจัดเก็บออบเจกต์ ซึ่งอาจรวมถึง Amazon S3, Cloudflare R2, DigitalOcean Spaces, Linode Object Storage เป็นต้น การใช้เส้นทางนี้อาจเป็นวิธีที่ยอดเยี่ยมและคุ้มค่าในการจัดเก็บสำรองฐานข้อมูลของคุณ อย่างไรก็ตาม โปรดระวังเป็น พิเศษ ว่าอย่าทำให้บัคเก็ตพื้นที่เก็บข้อมูลที่คุณใช้เข้าถึงได้แบบสาธารณะ

เปิดใช้งานและบังคับใช้การเชื่อมต่อ TLS

เว้นแต่ว่าคุณกำลังเรียกใช้ MySQL บนเครื่องเดียวกันกับเว็บเซิร์ฟเวอร์ของคุณ (ซึ่งตามที่เราได้กล่าวไปแล้วข้างต้น ไม่ใช่แนวปฏิบัติด้านความปลอดภัยที่เหมาะสมที่สุด) ขอแนะนำให้เข้ารหัสข้อมูลระหว่าง WordPress และ MySQL โดยใช้ Transport Layer Security (ใบรับรอง TLS) เดิมเรียกว่า Secure Socket Layer (ใบรับรอง SSL)

ตามค่าเริ่มต้น เมื่อคุณติดตั้ง MySQL ระบบจะสร้างใบรับรองที่ลงนามเองให้คุณโดยอัตโนมัติ คุณสามารถตรวจสอบได้โดยเรียกใช้คำสั่งต่อไปนี้ (หรือคุณสามารถใช้สคริปต์ mysql_ssl_rsa_setup เพื่อสร้างใบรับรองใหม่)

คุณจะต้องคัดลอก ca.pem จากรายการด้านบน (เช่น ผ่าน SCP) ไปยังเซิร์ฟเวอร์ที่ใช้งานเว็บไซต์ WordPress ของคุณ เมื่อคุณอัปโหลดไฟล์ ca.pem ไปยังเซิร์ฟเวอร์ WordPress ของคุณแล้ว คุณจะต้องย้ายใบรับรองไปยังที่เก็บใบรับรองที่เชื่อถือได้ของระบบปฏิบัติการ และอัปเดตที่เก็บใบรับรองที่เชื่อถือได้ดังต่อไปนี้

โปรดทราบ ชื่อไฟล์ของใบรับรอง CA ต้องลงท้ายด้วยนามสกุลไฟล์ .crt (เช่น mysql-ca.crt ถูกต้อง แต่ mysql-ca.pem.crt หรือ mysql-ca.pem ไม่ถูกต้อง)

sudo mv ca.pem /usr/local/share/ca-certificates/mysql-ca.crt
sudo update-ca-ใบรับรอง

ถัดไป คุณต้องกำหนดค่า WordPress ให้ใช้ TLS เมื่อเชื่อมต่อกับ MySQL โดยเพิ่มสิ่งต่อไปนี้ในไฟล์ wp-config.php ของการติดตั้ง WordPress

กำหนด ('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);

เมื่อคุณอัปเดต wp-config.php แล้ว WordPress จะเริ่มการเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ของคุณโดยใช้ TLS

ต่อไป ขอแนะนำให้คุณบังคับใช้การเชื่อมต่อ TLS กับเซิร์ฟเวอร์ MySQL ของคุณโดยใช้ตัวแปรระบบ required_secure_transport โดยเพิ่มตัวแปรต่อไปนี้ในไฟล์ /etc/mysql/mysql.conf.d/mysqld.cnf ของคุณ

need_secure_transport = เปิด

สุดท้าย รีสตาร์ท MySQL เพื่อให้การเปลี่ยนแปลงมีผล

systemctl รีสตาร์ท mysql

เปลี่ยนคำนำหน้าตาราง

ตามค่าเริ่มต้น ตาราง WordPress ทั้งหมดจะถูกสร้างด้วยคำนำหน้า 'wp_' ซึ่งจะทำให้ผู้โจมตีประสบความสำเร็จในการโจมตีบางอย่างได้ง่ายขึ้น เช่น การแทรก SQL เนื่องจากพวกเขาจะรู้ชื่อของตารางฐานข้อมูล แม้ว่าสิ่งนี้เพียงอย่างเดียวจะไม่ปกป้องคุณ แต่ก็เป็นแบบฝึกหัดที่ตรงไปตรงมา ซึ่งแนะนำโดยหลายๆ คนว่าเป็นแนวทางปฏิบัติด้านความปลอดภัย WordPress ที่ดีที่สุด

คุณสามารถเปลี่ยนคำนำหน้าฐานข้อมูลระหว่างขั้นตอนการติดตั้งหรือเมื่อใดก็ได้หลังจากนั้น แม้ว่าคำนำหน้าจะซับซ้อนกว่าเล็กน้อย ไม่ว่าจะด้วยวิธีใด คุณสามารถค้นหาบทเรียนออนไลน์เกี่ยวกับการเปลี่ยนคำนำหน้าฐานข้อมูล WordPress ได้

วิธีดำเนินการเปลี่ยนแปลง

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

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

รักษา WordPress ของคุณให้ปลอดภัย

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