Đối với những người có trang Web WordPress bị hack, bạn sẽ biết rằng tin tặc có xu hướng sửa đổi các file trong mã nguồn và sẽ chuyển hướng tất cả truy cập sang url khác. Thường tin tặc sẽ sửa đổi các file php nằm trong thư mục themes hoặc upload file php vào thư mục Uploads của bạn. Trong nội dung bài viết này chúng tôi sẽ hướng dẫn bạn cách sử dụng file .htaccess để hạn chế khả năng bị tấn công cũng như tăng cường bảo mật cho Website wordpress của bạn.
Bảo mật WordPress với .htaccess
1. Vô hiệu hóa thực thi PHP trong thư mục /wp-content/uploads
Để làm điều này bạn chỉ cần thêm rules sau vào trong file .htaccess của bạn
RewriteRule ^wp-content/uploads/.*.(?:php[1-7]?|pht|phtml?|phps|js)$ - [NC,F]
2. Bảo vệ tệp tin wp-config.php
Để bảo vệ tệp wp-config.php của bạn khỏi sự truy cập trái phép, chỉ cần rule sau vào tệp .htaccess của bạn.
<files wp-config.php> order allow,deny deny from all </files>
3. Bảo vệ .htaccess khỏi truy cập trái phép
Để bảo vệ .htaccess khỏi sự truy cập trái phép của tin tặc, bạn có thể ngăn chúng truy cập tệp thông qua rule này.
<files ~ "^.*.([Hh][Tt][Aa])"> order allow,deny deny from all satisfy all </files>
4. Chặn Cross-Site Scripting (XSS)
Đoạn mã sau đây bảo vệ trang web của bạn khỏi một số cuộc tấn công XSS cơ bản, cụ thể là tiêm một đoạn mã để cố gắng sửa đổi các biến toàn cục và yêu cầu.
# Blocks some XSS attacks <IfModule mod_rewrite.c> RewriteCond %{QUERY_STRING} (|%3E) [NC,OR] RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2}) RewriteRule .* index.php [F,L] </IfModule>
5. Hạn chế quyền truy cập vào wp-includes
Thư mục /wp-includes/ chứa các tệp WordPress cốt lõi. Không có lý do nào để cho phép bất cứ ai có quyền truy cập vào nó, bao gồm cả chủ sở hữu và quản trị viên. Vì vậy, để tăng cường bảo mật, tốt nhất là nên hạn chế tất cả quyền truy cập vào nó.
# Blocks all wp-includes folders and files <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>
6. Hạn chế quyền truy cập trực tiếp vào các file PHP của Plugins & Themes
Như đã đề cập trước đó, không có lý do nào để bất kỳ ai có quyền truy cập vào các file php trong plugins và themes, vô hiệu hóa việc truy cập trực tiếp vào nó là một biện pháp bảo mật tốt.
RewriteRule ^wp-content/plugins/.*.(?:php[1-7]?|pht|phtml?|phps)$ - [NC,F] RewriteRule ^wp-content/themes/.*.(?:php[1-7]?|pht|phtml?|phps)$ - [NC,F]
7. Vô hiệu hóa xmlrpc.php
XML-RPC là sử dụng giao thức WebService (SOAP) dùng XML để mã hóa và trao đổi dữ liệu (Remote Procedure Call XML) và có thể hỗ trợ các API của các CMS như WordPress API, Blogger API, ..Tính năng XML-RPC đã được bật mặc định trên WordPress kể từ phiên bản WordPress 3.5, và lý do chính cho việc này là cho phép ứng dụng di động WordPress giao tiếp với Website WordPress của bạn.
Nhìn chung, XML-RPC có nhiều nhược điểm hơn là ưu điểm, việc bật XML-RPC có thể dẫn đến tiếp xúc các lỗ hổng bên trong Website WordPress của bạn, và từ đó có thể trở thành mục tiêu tấn công của Hacker thông qua một số kiểu tấn công cơ bản như DDoS sử dụng pingback XML-RPC, Brute force sử dụng XML-RPC. Do đó các bạn nên tắt XML-RPC để tăng tính bảo mật cho Website của mình
<files xmlrpc.php> order allow,deny deny from all </files>
8. Giới hạn truy cập wp-admin
Nếu bạn đang sử dụng IP tĩnh bạn có thể muốn giới hạn quyền truy cập chỉ vào wp-admin và chỉ cho phép địa chỉ IP của bạn được quyền truy cập. Để làm điều này, bạn cần tạo một file .htaccess bên trong thư mục wp-admin với nội dung sau:
order deny,allow allow from địa-chỉ-ip-của-bạn deny from all
9. Tìm kiếm một nhà cung cấp Hosting uy tín
Ngoài cách dùng .htaccess để tăng cường bảo mật các bạn cũng nên lựa chọn cho mình một nhà cung cấp Hosting uy tín để sử dụng.
Đối với các Hosting Linux tại POWERNET đều sử dụng Cloud Linux đảm bảo hạn chế 100% Local Attack, ngoài ra hệ thống còn được tích hợp phần mềm Malware & Virus với công nghệ Imunify360.
Kết luận
Tổng kết lại chúng ta sẽ có file .htaccess hoàn chỉnh như sau:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # Blocks all wp-includes folders and files <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> # Blocks some XSS attacks <IfModule mod_rewrite.c> RewriteCond %{QUERY_STRING} (|%3E) [NC,OR] RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2}) RewriteRule .* index.php [F,L] </IfModule> <IfModule mod_rewrite.c> RewriteEngine On # Disable PHP in Uploads - Security > Settings > System Tweaks > PHP in Uploads RewriteRule ^wp-content/uploads/.*.(?:php[1-7]?|pht|phtml?|phps|js)$ - [NC,F] # Disable PHP in Plugins - Security > Settings > System Tweaks > PHP in Plugins RewriteRule ^wp-content/plugins/.*.(?:php[1-7]?|pht|phtml?|phps)$ - [NC,F] # Disable PHP in Themes - Security > Settings > System Tweaks > PHP in Themes RewriteRule ^wp-content/themes/.*.(?:php[1-7]?|pht|phtml?|phps)$ - [NC,F] </IfModule> # Bock access xmlrpc.php <Files xmlrpc.php> Order deny,allow Deny from all </Files> # Bock access wp-config.php <Files wp-config.php> Order deny,allow Deny from all </Files> # Bock access license.txt <Files license.txt> Order deny,allow Deny from all </Files> # Bock access readme.html <Files readme.html> Order deny,allow Deny from all </Files> # Bock access .htaccess <files ~ "^.*.([Hh][Tt][Aa])"> order allow,deny deny from all satisfy all </files>
Hy vọng qua bài viết này phần nào sẽ giúp các bạn có thể bảo mật WordPress với .htaccess một cách tốt hơn.