แก้ปัญหาเว็บ WordPress โดนมัลแวร์

เมื่อวานผมเห็นน้องคนนึงในเฟสบุ๊คโพสพบปัญหาเกี่ยวกับเรื่องของมัลแวร์ลงบนเว็บไซต์ 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 เวอร์ชั่นเดิมขึ้นไป เพราะเราจะพยายามทำให้ระบบอยู่ในสถานะเดิมมากที่สุดเท่าที่จะเป็นไปได้ครับ

สอน WordPress หรือ WooCommerce
สอน WordPress หรือ WooCommerce

ตรวจสอบ 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
Wordfence

Wordfence จะทำการสแกนทั้งเซิฟเวอร์ ไฟล์ เนื้อหา พาสเวิร์ด ช่องโหว่ และตรวจสอบอื่นๆ แล้วแจ้งว่ามีปัญหาข้อใดบ้าง เช่น โฟลเดอร์หรือไฟล์ใด ให้เราทำการแก้ไขปัญหานั้นๆ และยังแจ้งให้เราทราบอีกว่าระบบ WordPress, Theme และ Plugins ของเราตัวใดไม่ได้ทำการอัพเดทบ้าง ก็ให้เราทำการอัพเดททุกตัวครับ

มาถึงตรงนี้แล้วให้เราทำการเปิดหน้าเว็บไซต์ของเราอีกครั้ง คิดว่าเว็บไซต์คงสามารถใช้งานได้ปกติและไม่น่าจะมีปัญหาแล้ว ให้กลับไปที่ไฟล์ wp-config.php อีกครั้ง define( ‘WP_DEBUG’,true ); ให้กลับมาเป็น define( ‘WP_DEBUG’, false ); ก็น่าจะเสร็จสิ้นของการแก้ไขปัญหาแล้วครับ

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

Hostatom banner
Hostatom