disable các cấu hình trong wp-config.php
define('WP_DEBUG', false); define('WP_DEBUG_LOG', false); /* Add any custom values between this line and the "stop editing" line. */ define( 'DISALLOW_FILE_EDIT', true ); define( 'DISALLOW_FILE_MODS', true ); define( 'AUTOMATIC_UPDATER_DISABLED', true ); define( 'WP_AUTO_UPDATE_CORE', false ); define( 'SCRIPT_DEBUG', false ); define( 'WP_DEBUG_DISPLAY', false ); define( 'SAVEQUERIES', false ); define('DISALLOW_FILE_INCLUDE', true); // Ngăn chặn tải tệp từ xa
htaccess wordpress
# BEGIN WordPress # Các nội dung nằm giữa "BEGIN WordPress" và "END WordPress" được tạo ra tự động, và chỉ nên được thay đổi thông qua các filter của WordPress. Mọi thay đổi tới thành phần này có thể sẽ bị mất và ghi đè. <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_USER_AGENT} "MJ12bot" [NC] RewriteRule .* - [F,L] RewriteCond %{HTTP_USER_AGENT} "facebookexternalhit" [NC] RewriteRule .* - [F,L] RewriteCond %{HTTP_USER_AGENT} "Amazonbot" [NC] RewriteRule .* - [F,L] RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress # Bảo vệ tệp wp-config.php <files wp-config.php> order allow,deny deny from all </files> # Bảo vệ thư mục wp-includes <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^wp-admin/includes/ - [F,L] RewriteRule !^wp-includes/ - [S=3] RewriteRule ^wp-includes/[^/]+\.php$ - [F,L] RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L] RewriteRule ^wp-includes/theme-compat/ - [F,L] </IfModule> # Bảo vệ tệp đọc readme.html và license.txt <FilesMatch "^(readme\.html|license\.txt)$"> Order allow,deny Deny from all </FilesMatch> # Chặn truy cập vào các file nhạy cảm <Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy all </Files> # Bảo vệ file .log <Files ~ "\.log$"> Order allow,deny Deny from all Satisfy All </Files> # Bảo vệ các file có phần mở rộng nhạy cảm <FilesMatch "\.(sql|sh|bash|bat)$"> Order Deny,Allow Deny from all </FilesMatch> # Chặn các bot xấu dựa trên User-Agent SetEnvIfNoCase User-Agent "BadBot" bad_bot Deny from env=bad_bot # Chặn các yêu cầu với chuỗi SQL Injection RewriteEngine On RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR] RewriteCond %{QUERY_STRING} (\<|%3C) [NC,OR] RewriteCond %{QUERY_STRING} (\;|%3B) [NC] RewriteCond %{QUERY_STRING} (base64_encode|union|select|insert|drop|update) [NC] RewriteRule ^(.*)$ - [F,L]
code php bảo mật wordpress
<?php // Tắt XML-RPC add_filter('xmlrpc_enabled', '__return_false'); //Ẩn phiên bản WordPress remove_action('wp_head', 'wp_generator'); // disable resapi // Bảo vệ chống tấn công Brute Force qua API add_filter('rest_authentication_errors', function ($result) { if (!empty($result)) { return $result; } if (!is_user_logged_in()) { return new WP_Error('rest_forbidden', 'Bạn cần đăng nhập để truy cập API.', ['status' => 401]); } return $result; }); //Tắt Pingbacks và Trackbacks add_filter('xmlrpc_methods', function($methods) { unset($methods['pingback.ping']); return $methods; }); // Tắt tính năng hiển thị danh sách tác giả add_action('template_redirect', 'disable_author_archives'); function disable_author_archives() { if (is_author()) { wp_redirect(home_url()); exit; } } //Giới hạn số lần đăng nhập thất bại function limit_login_attempts() { if (!session_id()) { session_start(); } if (isset($_POST['wp-submit'])) { $attempts = isset($_SESSION['login_attempts']) ? $_SESSION['login_attempts'] : 0; if ($attempts >= 3) { wp_die('Bạn đã thử quá nhiều lần. Vui lòng thử lại sau 10 phút.'); } if (wp_authenticate($_POST['log'], $_POST['pwd'])) { $_SESSION['login_attempts'] = 0; } else { $_SESSION['login_attempts'] = $attempts + 1; } } } add_action('login_init', 'limit_login_attempts'); // Bảo vệ chống tấn công bằng cách tiêm mã độc qua URL if (!empty($_SERVER['REQUEST_URI']) && strpos($_SERVER['REQUEST_URI'], 'eval(') !== false || strpos($_SERVER['REQUEST_URI'], 'base64') !== false) { header('HTTP/1.1 403 Forbidden'); exit; } //Tắt thông báo lỗi trong đăng nhập function no_login_errors() { return 'Thông tin đăng nhập không đúng.'; } add_filter('login_errors', 'no_login_errors'); function block_invalid_user_agent_ajax_requests() { // Kiểm tra nếu request là một AJAX request if (defined('DOING_AJAX') && DOING_AJAX) { // Danh sách các User-Agent không mong muốn $blocked_user_agents = array('BadBot', 'MaliciousTool', 'curl', 'wget'); // Lấy User-Agent của request $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; // Kiểm tra nếu User-Agent nằm trong danh sách bị chặn if (in_array($user_agent, $blocked_user_agents)) { // Trả về lỗi 403 nếu User-Agent không hợp lệ wp_die('Access denied: Invalid User-Agent', 'Forbidden', array('response' => 403)); } } } add_action('admin_init', 'block_invalid_user_agent_ajax_requests'); function block_suspicious_requests() { // Mẫu chuỗi truy vấn đáng ngờ $suspicious_patterns = array('/<script>/i', '/UNION/i', '/SELECT.*FROM/i'); // Lấy chuỗi truy vấn $query_string = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : ''; // Kiểm tra nếu chuỗi truy vấn chứa mẫu đáng ngờ foreach ($suspicious_patterns as $pattern) { if (preg_match($pattern, $query_string)) { // Trả về lỗi 403 nếu phát hiện chuỗi truy vấn đáng ngờ wp_die('Access denied: Suspicious request', 'Forbidden', array('response' => 403)); } } } add_action('admin_init', 'block_suspicious_requests'); function block_invalid_parameters() { $invalid_patterns = array( '/<script>/i', // XSS '/union/i', // SQL Injection '/select/i', // SQL Injection '/base64_encode/i', // Tiềm ẩn tấn công '/base64_decode/i', // Tiềm ẩn tấn công '/eval\(/i', // Tiềm ẩn tấn công '/system\(/i', // Tiềm ẩn tấn công '/exec\(/i', // Tiềm ẩn tấn công '/shell_exec\(/i' // Tiềm ẩn tấn công ); // Lặp qua tất cả các tham số trong request foreach ($_REQUEST as $key => $value) { foreach ($invalid_patterns as $pattern) { // Kiểm tra nếu giá trị tham số chứa mẫu đáng ngờ if (preg_match($pattern, $value)) { // Trả về lỗi 403 nếu phát hiện tham số không hợp lệ wp_die('Access denied: Invalid parameter value', 'Forbidden', array('response' => 403)); } } } } add_action('admin_init', 'block_invalid_parameters');