แก้ปัญหาเว็บ WordPress โดนมัลแวร์
81 | | . | Security, WordPress, การแก้ไขปัญหา, ความรู้ hostatom, wordfence, wp-config.php
เมื่อวานผมเห็นน้องคนนึงในเฟสบุ๊คโพสพบปัญหาเกี่ยวกับเรื่องของมัลแวร์ลงบนเว็บไซต์ WordPress ของเขา จึงได้ทักเขาไปเพื่อสอบถามเรื่องโฮสติ้งที่ใช้อยู่ เพราะสาเหตุหนึ่งที่เป็นคือ การที่โฮสติ้งมันไม่มี Web Application Firewall (WAF) จึงทำให้ถูกการโจมตีดังกล่าว หลังจากได้ทราบเรื่องราวแล้วก็เลยแนะนำวิธีเบื้องต้นในการแก้ไขปัญหาเว็บ WordPress ไปให้ สำหรับบทความนี้ผมจะมาแนะนำเกี่ยวกับการ แก้ปัญหาเว็บ WordPress โดนมัลแวร์ redirect ไปหน้าอื่น ว่ามีสเต็ปและวิธีแก้ไขปัญหาอย่างไรจนเว็บมาเป็นปกติ มาอ่านตามกันเลยครับ
เริ่มแรกหลังจากที่เราพบว่าเว็บตัวเองถูกโจมตีแล้ว หากเราโดนไม่หนักมากให้เราทำการติดตั้งในส่วนของปลั๊กอินที่ชื่อ Wordfence ทำการสแกนแล้วทำการแก้ไขในส่วนของไฟล์ที่ปลั๊กอินแจ้งได้เลยครับ แต่หากเป็นมากก็ให้ทำตามขั้นตอนด้านล่างนี้
เริ่มแก้ปัญหาเว็บ WordPress
ให้เราทำการดาวน์โหลดไฟล์ WordPress และฐานข้อมูลทั้งหมดมาลงไว้ที่เครื่องคอมพิวเตอร์ของเราก่อนครับ เพื่อทำการแบ็คอัพ (Backup) หลังจากขั้นตอนนี้แล้ว เราจะต้องรู้ด้วยนะครับ ว่าเวอร์ชั่น WordPress ของเราปัจจุบันเป็นเวอร์ชั่นอะไร หากไม่ทราบให้ทำการเข้าไปที่โฟลเดอร์ wp-includes แล้วหาไฟล์ version.php หาคำว่า $wp_version จะทำการระบุชื่อเวอร์ชั่นของเราอยู่ เช่น
$wp_version = '5.2.2';
หลังจากนั้นให้ทำการลบโฟลเดอร์และไฟล์ทั้งหมด ให้เหลือโฟลเดอร์และไฟล์ คือ โฟลเดอร์ wp-content และไฟล์ wp-config.php ที่ห้ามลบเด็ดขาด แล้วให้เราไปดาวน์โหลดไฟล์ WordPress ใหม่โดยเวอร์ชั่นจะต้องเป็นไปตามที่ไฟล์ใน version.php ระบุไว้ครับ แล้วทำการอัพไฟล์ขึ้นใหม่ยกเว้น 2 ไฟล์ที่ไม่ได้ลบ ย้ำ!! ห้ามทับ 2 ไฟล์นั้นเด็ดขาด สาเหตุที่เราต้องทำการอัพโหลด WordPress เวอร์ชั่นเดิมขึ้นไป เพราะเราจะพยายามทำให้ระบบอยู่ในสถานะเดิมมากที่สุดเท่าที่จะเป็นไปได้ครับ
ตรวจสอบ wp-config.php
ขั้นตอนถัดมาให้ทำการเปิดไฟล์ wp-config.php ให้เราทำการตรวจดูว่าภายในไฟล์ดังกล่าวมีการเปลี่ยนแปลงข้อมูลอะไรไปหรือไม่ โดยจะมีรูปแบบมาตรฐานของไฟล์ wp-config.php ตามโค้ดนี้ครับ
<?php /** * The base configuration for WordPress * * The wp-config.php creation script uses this file during the * installation. You don't have to use the web site, you can * copy this file to "wp-config.php" and fill in the values. * * This file contains the following configurations: * * * MySQL settings * * Secret keys * * Database table prefix * * ABSPATH * * @link https://codex.wordpress.org/Editing_wp-config.php * * @package WordPress */ // ** MySQL settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define( 'DB_NAME', 'ชื่อฐานข้อมูลของคุณ' ); /** MySQL database username */ define( 'DB_USER', 'ชื่อผู้ใช้งานของคุณ' ); /** MySQL database password */ define( 'DB_PASSWORD', 'รหัสผ่านของคุณ' ); /** MySQL hostname */ define( 'DB_HOST', 'localhost' ); /** Database Charset to use in creating database tables. */ define( 'DB_CHARSET', 'utf8mb4' ); /** The Database Collate type. Don't change this if in doubt. */ define( 'DB_COLLATE', '' ); /**#@+ * Authentication Unique Keys and Salts. * * Change these to different unique phrases! * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service} * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again. * * @since 2.6.0 */ define( 'AUTH_KEY', 'lT*)PNoUo_XG^[&[_zpFs|OzMv7)l~w$Odl0t4AGQJ<V/qE&k[-wbP%zlYm3q~#K' ); define( 'SECURE_AUTH_KEY', 'g8ZjGq6@!4NYp4[VjbHu]g~?89&!l_m/E2?.^hhKThgH9@NOdMv;H?CIK,Ccg]S.' ); define( 'LOGGED_IN_KEY', '{n(TH_Byhb1M$5zm{##,JXd;|hdiEB25Nxc_KT) LL0;p6:Xa:V#;u(h1K;gs/gs' ); define( 'NONCE_KEY', '<Amxhs&N+WLWeD/BKqq=>{IS<pRF9Y@e>_@vO+9_#TeWm3#idUr9nlF<K}]}QGXJ' ); define( 'AUTH_SALT', 'eR%d!7zerFssK</ZPx:mu(Q_E#SGUnW_TBTfSsEV7bfDF,6Z)Ts`1I+u(RpnYF.I' ); define( 'SECURE_AUTH_SALT', '7^zxDMS3x0|MSiON07-WSK1/_3p9c1HRPR+])qtBX+RqR[qS~zW$]8b;O}Gh13-K' ); define( 'LOGGED_IN_SALT', 'WeGF@+tDkMza:p_;66mIGIlPz#RfyIi+8_m_0g} *gNUhLx*l4?;[__rJ_V~;k%(' ); define( 'NONCE_SALT', '<vO*^rc|4UDi<x*#wJ5F.bN48r:x0#tBHW<mI*tDzyxcIh/#s?xz<I~uqm]OHpet' ); /**#@-*/ /** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each * a unique prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'wp_'; /** * For developers: WordPress debugging mode. * * Change this to true to enable the display of notices during development. * It is strongly recommended that plugin and theme developers use WP_DEBUG * in their development environments. * * For information on other constants that can be used for debugging, * visit the Codex. * * @link https://codex.wordpress.org/Debugging_in_WordPress */ define( 'WP_DEBUG', false ); /* That's all, stop editing! Happy publishing. */ /** Absolute path to the WordPress directory. */ if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', dirname( __FILE__ ) . '/' ); } /** Sets up WordPress vars and included files. */ require_once( ABSPATH . 'wp-settings.php' );
เราจะต้องไม่ทำการแก้ไขในส่วนของบรรทัดที่เกี่ยวข้องกับ DB_NAME, DB_USER และ DB_PASSWORD นะครับ หากเราทำการแก้ไขในส่วนนี้จะไม่สามารถเข้าไปหน้าเว็บได้ ให้เราทำการลบโค้ดที่ไม่ตรงกับมาตรฐานของ WordPress ทิ้งไปครับ หรือหากไม่มั่นใจให้ทำเครื่องหมาย // หน้าบรรทัดที่ไม่มีในโค้ดมาตรฐาน
หลังจากนั้นให้เราลองทำการเปิดหน้าเว็บของเราว่า ผลที่ได้เป็นอย่างไร หน้าเว็บของเราได้รับการแก้ไขแล้วหรือไม่ครับ หากยังไม่ได้รับการแก้ไขอีก ให้เรากลับไปที่ไฟล์ wp-config.php อีกครั้ง แล้วแก้ define( ‘WP_DEBUG’, false ); ให้เป็น define( ‘WP_DEBUG’, true ); ซึ่งจะเป็นการแจ้งเตือนปัญหาแบบโค้ดว่าติดปัญหาใด หลังจากนั้นให้เรากลับไปหน้าเว็บอีกครั้งแล้วลอง refresh ใหม่ ณ ขั้นตอนนี้อาจจะมีการแสดงโค้ดออกมาให้เห็นว่าปัญหาเกิดจากส่วนใด เช่น อาจจะเกิดจากปลั๊กอินในเรื่องของ HTTPS เพราะเปิดปลั๊กอิน wordpress-https ไว้ ให้เข้าไปในโฟลเดอร์นั้นผ่าน FTP แล้วแก้ชื่อปลั๊กอินนั้นไปก่อน โดยอาจเปลี่ยนเป็น wordpress-httpsxxx เพื่อหลบเลี่ยงการติดปัญหาเนื่องจากปลั๊กอิน หากปัญหาเกิดจากธีมของเรา ให้เราเข้าไปในโฟลเดอร์ wp-content/themes แล้วดูชื่อธีมที่เราใช้งาน ทำการลบแล้วทำการลงธีมเดิมใหม่อีกครั้งผ่าน FTP หรือด้วยโปรแกรม FileZilla
ติดตั้ง Wordfence
ถึงขั้นตอนนี้แล้ว หากยังไม่ได้ผล ให้เราทำการฝืนติดตั้งปลั๊กอิน Wordfence ครับ โดยทำการอัปโหลดผ่าน FTP เช่นกัน โดยให้ไปอยู่ในโฟลเดอร์ wp-content/plugins ให้เราทำการเปิดหน้าหลังบ้านของเราผ่านเบราเซอร์แล้วทำการเปิดใช้งาน Wordfence แล้วทำการลงทะเบียนอีเมล์ในปลั๊กอินและทำการเลือกแผนการชำระเงิน ให้เลือกแบบฟรี แล้วทำการเลือกเมนู Scan เมื่อเข้าสู่หน้าต่างการทำงานของ Wordfence ได้แล้วก็ให้ทำการกดปุ่ม Start New Scan เพื่อให้ปลั๊กอินนี้ทำการตรวจสอบทั้งระบบของเว็บไซต์
Wordfence จะทำการสแกนทั้งเซิฟเวอร์ ไฟล์ เนื้อหา พาสเวิร์ด ช่องโหว่ และตรวจสอบอื่นๆ แล้วแจ้งว่ามีปัญหาข้อใดบ้าง เช่น โฟลเดอร์หรือไฟล์ใด ให้เราทำการแก้ไขปัญหานั้นๆ และยังแจ้งให้เราทราบอีกว่าระบบ WordPress, Theme และ Plugins ของเราตัวใดไม่ได้ทำการอัพเดทบ้าง ก็ให้เราทำการอัพเดททุกตัวครับ
มาถึงตรงนี้แล้วให้เราทำการเปิดหน้าเว็บไซต์ของเราอีกครั้ง คิดว่าเว็บไซต์คงสามารถใช้งานได้ปกติและไม่น่าจะมีปัญหาแล้ว ให้กลับไปที่ไฟล์ wp-config.php อีกครั้ง define( ‘WP_DEBUG’,true ); ให้กลับมาเป็น define( ‘WP_DEBUG’, false ); ก็น่าจะเสร็จสิ้นของการแก้ไขปัญหาแล้วครับ
ขั้นตอนท้ายสุดเราจะต้องทำการแบ็คอัพเว็บที่ดีอีกครั้งหนึ่งเพื่อป้องกันการโดนมัลแวร์อีกครั้งครับ เพราะปัญหานี้มักจะเป็นซ้ำๆ เสมอ อย่างที่บอกไปในตอนต้นว่า สาเหตุมาจากโฮสติ้งที่ใช้ไม่มีระบบป้องกันที่ดีพอ ดังนั้นถ้าเป็นไปได้ก็ให้เปลี่ยนโฮสติ้งไปยังเจ้าใหม่เถอะครับ เจ้าที่ผมแนะนำก็ Hostatom ที่ใช้มาไม่มีปัญหาเรื่องนี้เลยนะครับ หากใครแก้ไขได้แล้วจะช่วยสนับสนุนค่าแนะนำโฮสติ้งก็รบกวนกดแบนเนอร์ด้านล่างแล้วทำการสั่งซื้อทันทีด้วยนะครับ ผมจะได้ค่าคอมมิสชั่น ขอบคุณครับ