Bảo mật căn bản WordPress – Hạn chế các cuộc tấn công Local Attack

Lê Châu Hải My 19 phút đọc

WordPress là 1 CMS nhanh gọn, tùy biến cao và cộng đồng sử dụng / phát triển rất đông đảo. Bản thân CMS nào cũng có điểm yếu của nó, vì thế các hacker sẽ luôn lợi dụng để tấn công website… Hầu như các nguyên nhân dẫn đến website bị hack phần lớn là do người dùng WordPress chưa bảo mật website một cách triệt để.

Trong bài viết này chúng tôi sẽ hướng dẫn các bạn một số thủ thuật để bảo mật cho website sử dụng CMS WordPress an toàn, hạn chế việc bị tấn công Hack và Local Attack.

Che đậy file “wp-config.php”

File wp-config.php rất quan trọng đối với WordPress, việc ẩn file “nhạy cảm” này cũng sẽ giúp chúng ta hạn chế phần nào tấn công từ các hacker.

Trong môi trường Web Cloud Linux Hosting sử dụng cPanel, thông thường các tập tin của website sẽ đều nằm trong thư mục public_html và thường đường dẫn tuyệt đối sẽ là /home/username/public_html/wp-config.php.

Do đó, cách ẩn file tốt nhất là chúng ta đặt wp-config.php ra khỏi public_html, bằng cách :

  • Đăng nhập vào Cloud Hosting và tạo thêm một thư mục tên bất kỳ nằm ngang hàng với public_html.
security-WordPress
  • Sau đó copy file wp-config.php trong thư mục public_html vào thư mục mới tạo.
  • Cuối cùng là sửa nội dung file wp-config.php trong thư mục public_html thành như sau, xem liên kết ở dưới:
    <php
    
    if ( !defined('ABSPATH') )
    
    define('ABSPATH', dirname(__FILE__) . '/');
    
    require_once(ABSPATH . '../baomat/wp-config.php');
     
  • Bạn tùy biến thay thế đường dẫn phù hợp với thư mục mà bạn đã tạo ngang hàng với public_html ở trên.

Lưu ý: Cách này chỉ áp dụng cho các website có file cài đặt ngay trong thư mục public_html chứ không hỗ trợ một lớp thư mục khác. Bạn có thể áp dụng với thư mục www hoặc httpdocs của Plesk Panel nếu có.

Liên tục thay đổi tiền tố “prefix_” trong Database

Database prefix (tiền tố CSDL) mặc định của WordPress sẽ là wp_, điều này vô tình làm cho các hacker biết rõ tên của từng table của website bạn nếu bạn không đổi tiền tố này đi.

Tên của các bảng trong CSDL có thể giống nhau. Nhưng mà tiền tố (prefix) thì tốt nhất nên là của riêng chúng ta. Vì thế, khi cài đặt WordPress lần đầu thì bạn nên lưu ý thay đổi giá trị này.

Tuy nhiên đối với các website đang sử dụng vẫn có thể dễ dàng thay đổi với các cách sau đây:

– Dùng Plugin

Đây là một cách hoàn toàn đơn giản. Bạn có thể thử dùng plugin sau “Change DB Prefix”.

Sau khi cài đặt, các bạn chỉ cần gõ tên prefix hiện tại và prefix muốn chuyển, sau đó nhấp Save Change là hoàn tất. Rất đơn giản.

Hoặc sử dụng iThemes Security để bảo mật toàn diện.

– Dùng phpMyAdmin

Lưu ý: Thực hiện backup lại database và file wp-config.php trước khi thực hiện.

Nếu bạn biết một chút về database thì có thể login vào phpmyadmin và thay đổi trong đó với câu lệnh (query) như sau:

RENAME TABLE
wp_commentmeta TO newprefix_commentmeta,
wp_comments TO newprefix_comments,
wp_links TO newprefix_links,
wp_options TO newprefix_options,
wp_postmeta TO newprefix_postmeta,
wp_posts TO newprefix_posts,
wp_terms TO newprefix_terms,
wp_term_relationships TO newprefix_term_relationships,
wp_term_taxonomy TO newprefix_term_taxonomy,
wp_usermeta TO newprefix_usermeta,
wp_users TO newprefix_users;
[/dt_code]
 

Trong đó wp_ là tiền tố hiện tại, newprefix_ là tiền tố cần chuyển sang (tiền tố này bạn có thể thay đổi tùy theo ý thích của mình).

Tuy nhiên, sau khi đã thao tác trong database thì bạn phải vào trong file wp-config.php để điều chỉnh tại dòng $table_prefix = 'wp_'; đổi thành $table_prefix = ' newprefix_';

Bước cuối cùng, chúng ta cần phải tiến hành thay đổi thêm một số cấu hình liên quan nữa mới hoàn chỉnh. Có 2 bảng cần phải thay đổi.

– Bảng newprefix_option (bảng mới sau khi đổi) tìm tới dòng thứ 89 có tên là wp_user_roles và chuyển thành newprefix_user_roles.
– Bảng newprefix_usermeta, các bạn chuyển cột meta_key với các tiền tố wp_ thành newprefix_.

Sau khi thực hiện xong các bước trên thì coi như mọi thứ đã hoàn thành. Chúng ta có thể đổi prefix theo ý của mình hoặc bạn có thể thay đổi một cách ngẫu nhiên. Thường khoảng 1-2 tháng thì các bạn nên thay đổi một lần.

Đổi security key

Bạn thử mở file wp-config.php ra, kéo xuống dưới và có thấy một đoạn nội dung giống thế này?

1
2
3
4
5
6
7
8
define('AUTH_KEY', 'jpwfcb9izge9gnz9unoakwpovdtn754sekxebbs5zvdzgl187lftu51o6qucv6py');
define('SECURE_AUTH_KEY', 'lqodqrrfksxmn8qsy6i3kwshu7su1czmnt6xj6wtpx54er9c5dmweqptupwzzfpa');
define('LOGGED_IN_KEY', 'pxo6nd6mnfw04m3u0m38layynhrh7atesuqgonitzf0xxnqxyydqpfurqr3znsoi');
define('NONCE_KEY', 'bhlrnqwfoxfzhpcyhyqlo8jh7vhdh3ov4swgsmygwvfzx8q65hmilhwt4iylgkd8');
define('AUTH_SALT', 'prfbyplbizqiqu1i42hm622ovsznaoayr9abxcbz15xks54nnkhguzqhwkndzy6v');
define('SECURE_AUTH_SALT', 'erjzw2objjfmachy7vt9mq2ktufh2331ypnuaeanjl1oegorjrngvzvcrftnywkd');
define('LOGGED_IN_SALT', 'kpvryyyj1zwznarx4l8lloigurf9mqetnlojnxtygjhuqtj9acq4lpr5jsm2kyjg');
define('NONCE_SALT', 'arimerdvr8fbw7pkigotdb7psvc2ysa7bqrnunrzwbcqlkqhs6xzokhzwnrmsg3a');

Bên trên là các chuỗi ký tự ngẫu nhiên lưu lại các session của từng user khi đăng nhập vào bảng điều khiển Admin. Hãy chắc chắn rằng bạn đã nhập ký tự ngẫu nhiên cho các key trên.

Bạn có thể truy cập vào đây để tự động tạo ra các chuỗi security key ngẫu nhiên sau mỗi lần F5 rồi copy vào.

Cũng nên lưu ý rằng, nếu website bạn đã đang bị hack thì cũng nên đổi lại key này vài lần trong tuần để đảm bảo.

Ẩn thông báo lỗi khi login

Thông báo lỗi khi login đôi lúc vô tình lại là thông tin để các hacker dò ra thông tin của bạn. Do đó, tốt nhất thì chúng ta nên ẩn đi.

Và cách thức thì cũng rất đơn giản, bạn chỉ cần vào tập tin functions.php trong thư mục theme và thêm filter này vào

1
add_filter('login_errors',create_function('$a', "return null;"));

Bảo mật hai lớp cho “wp-admin” bằng .htaccess

Thông thường, khi truy cập đường dẫn tenmiencuaban/wp-admin thì sẽ hiển thị màn hình đăng nhập quản trị website. Tuy nhiên, muốn tối ưu hơn chúng ta sẽ tạo thêm một lớp bảo mật nữa từ server với file .htaccess. Khi ấy, người dùng vào tenmiencuaban/wp-admin thì sẽ hiển thị ra một khung thông báo yêu cầu điền tài khoản và mật khẩu.

– Nếu bạn đang sử dụng hosting và quản lý bằng Plesk Panel hoặc cPanel thì có thể thao tác đơn giản dựa tính năng có sẵn như hướng dẫn tạo : Password Protecting Directories cho thư mục wp-admin.

– Trong trường hợp ngược lại nếu không có tính năng trên chúng ta sẽ thực hiện thủ công với các bước tạo Password Protect thư mục wp-admin.

– Các lỗi hay gặp có thể xảy ra khi dùng phương thức bảo mật này:

  • Lỗi 404 Error hoặc Too many redirects error : trong trường hợp này thì bạn vào trong file .htaccess gốc ở thư mục root của WordPress (không phải file vừa tạo trong wp-admin), và thêm vào một dòng như sau:
     
    1
    ErrorDocument 401 default
  • Lỗi không dùng được file ajax-admin.php : Nguyên nhân là khi chúng ta bảo mật thư mục wp-admin thì đồng thời cũng sẽ chặn các truy cập vào thư mục này thông qua các tập tin trong đó. Do đó, các plugin có sử dụng ajax-admin.php ngoài front-end sẽ không thể truy cập được. Trong trường hợp đó, bạn thêm đoạn code sau vào file .htaccess ở thư mục wp-admin
     
    1
    2
    3
    4
    5
    <Files admin-ajax.php>
    Order allow,deny
    Allow from all
    Satisfy any
    </Files>
  • Không thực thi được .htaccess: Nguyên nhân do có thể bạn chưa “Enable Apache Htaccess Files”. Cách thực hiện thì rất đơn giản là vào trong FTP và tìm dòng lệnh như sau /etc/apache2/apache2.conf (đường dẫn này còn tùy thuộc vào hạ tầng máy chủ của bạn)
    1
    2
    3
    4
    5
    6
    <Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
    </Directory>

    Bạn thay đổi AllowOverride None thành AllowOverride All >>> Lưu lại và khởi động lại Apache.

Chi tiết bạn có thể tham khảo thêm tài liệu: Enabling Use Of Apache Htaccess Files.

Không nên hiển thông tin thị thư mục

Thông thường, nếu bạn vào một thư mục trên website mà không có sự hiện diện của các tập tin như index.html, index.php, … thì tự động server sẽ trả về toàn bộ danh sách “cây” các tập tin, các thư mục con tồn tại trong thư mục này. Chính vì thế, muốn bảo vệ thông tin của bạn thì tốt nhất trong mỗi thư mục nên có 1 file index.html rỗng hoặc file index.html đó sẽ tự redirect về trang chủ.

Lựa chọn một mật khẩu siêu việt

Hãy chọn một mật khẩu của riêng mình nhưng phải đảm bảo rằng, trong mật khẩu chúng ta sử dụng có đầy đủ các yêu tố như sau:

  • Độ dài mật khẩu tối thiểu là 8 – 12 ký tự.
  • Mật khẩu phải đảm bảo có:
    • Các ký tự đặc biệt như !#$%+-:_=_@]^_`{|}~
    • Các ký tự HOA – thường (A-Z a-z).
    • Các con số (0-9).
  • Mật khẩu không được có khoảng trắng.
  • Mật khẩu không thể chứa (trùng khớp) với tên hoặc bí danh tài khoản quản trị.

Một điểm đáng chú ý nữa là bạn hạn chế sử dụng chức năng ghi nhớ mật khẩu của trình duyệt. Nếu người khác vô tình được ngồi vào máy của mình và vô tình login một cách tự đông vào back-end thì chuyện gì đến rồi cũng sẽ đến.

Không nên dùng user với tên “admin” hoặc “root”

Nếu bạn đang sử dụng tài khoản với cái user name là admin, root, administrator, … thì tốt nhất nên thay đổi. Vì đó là một trong những cái username phổ biến, hacker hoàn toàn có thể sử dụng nó để xâm nhập vào hệ thống của bạn.

Nếu muốn đổi thì cũng đơn giản, bạn chỉ cần thực hiện một trong hai cách sau đây: – Tạo một tài khoản mới với username mới và set ở quyền quản trị cao nhất. Sau đó login vào tài khoản mới và xóa cái username cũ.
– Nếu chúng ta có kiến thức về quản lý CSDL thì login vào phpmyadmin và vào bản wp-users để thay đổi.

Cấm sửa theme và plugin trong bảng điều khiển

Có một vài hacker khá tinh vi đó là sau khi đã xâm nhập vào được website bạn thì họ sẽ chèn một vài đoạn mã nào đó nằm rải rác bên trong các theme/plugin mà bạn đang dùng.

Do đó, hãy cân nhắc dùng tính năng Editor trong bảng quản trị, tốt nhất là hãy tắt nếu chúng không dùng tới, cách tắt là chèn đoạn nội dung dưới đây vào bất kỳ dòng nào trong file wp-config.php:

 
1
define('DISALLOW_FILE_EDIT',true);

Cấm cài thêm “theme/plugin”

Cũng không có ngoại lệ trong trường hợp hacker có thể tự ý cài thêm một plugin hay theme nào đó mà bên trong đó toàn chứa mã độc nếu họ có quyền truy cập vào bảng điều khiển. Do đó, nếu bạn không có nhu cầu cài theme theme/plugin thì hãy đặt đoạn sau vào file wp-config.php:

 
1
define('DISALLOW_FILE_MODS',true);

CHMOD file “wp-config.php”

Mặc định các file trong WordPress sẽ được CHMOD thành 644 và folder là 755. Tuy nhiên đối với file wp-config.php thì bạn cũng nên CHMOD tối ưu hơn, bạn có thể thay thành 440, 444 hoặc 400. Tham khao chi tiết trong bài viết : Cấu hình CHMOD an toàn cho Website.

Chặn thực thi file “wp-config.php”

Đây cũng là một tip hay nếu bạn không thích bất cứ ai can thiệp đến file wp-config.php trên host.

– Đối với máy chủ NGINX thì chèn đoạn sau vào file config:

1
2
3
location ~* wp-config.php {
  deny all;
}

– Còn đối với máy chủ Apache thì chèn đoạn sau vào file .htaccess:

1
2
3
4
<Files wp-config.php>;
    order allow,deny
    deny from all
</Files>

Khóa đường dẫn “wp-admin”

Dĩ nhiên thư mục wp-admin và file wp-login.php luôn là điểm tấn công nếu một ai đó muốn truy cập vào website của bạn. Do đó, tốt hơn hết là chặn hết tất cả lượt truy cập vào hai khu vực này, trừ bạn ra.

– Bạn có thể lựa chọn sử dụng tính năng Login Protect của Incapsula hoặc theo các cách sau.

– Đối với máy chủ Apache thì chèn đoạn sau vào file .htaccess trong thư mục wp-admin, thay số 123.456.789 thành IP của máy bạn:

1
2
3
4
5
<FilesMatch ".*">
 Order Deny,Allow
 Deny from all
 Allow from 123.456.789
</FilesMatch>

– Đối với NGINX thì chèn đoạn này vào file config:

1
2
3
4
location ~ ^/(wp-admin|wp-login.php) {
                allow 123.456.789;
                deny all;
  }

Thường xuyên update WordPress và Plugin

WordPress là một trong những mã nguồn mở có tốc độ update nhanh cũng sắp chóng mặt. Nguyên nhân là nó được ưa chuông nhất hiện tại, nhưng càng nhiều người dùng thì người ta sẽ thường xuyên phát hiện lỗi và buộc nhà phát triển phải vá lỗi để đảm bảo khả năng về bảo mật cũng như cải thiện chất lượng khi người dùng và lập trình viên sử dụng.

Do đó, bạn hãy thường xuyên kiểm tra và nâng cấp WordPress core cũng như các Plugin đang có trên website của mình. Ngoài ra bạn cũng nên xóa hoàn toàn đi các plugin nào không sử dụng mà vẫn để ở chế độ Deactive.

Sử dụng các plugin quét mã độc

Bước này có thể may mắn cho bạn biết trên host của bạn đang chứa các file nào để mà bạn có thể xóa nó đi hoặc tải về….ngâm cứu. Dưới đây là các plugin tốt nhất để bạn quét mã độc trên host hoàn toàn miễn phí mà bạn có thể dùng:

Thường xuyên backup dữ liệu

Cách bảo vệ an toàn nhất là nên backup dữ liệu thường xuyên (cả database, source code, resource,…). Nếu số bạn may mắn thì hosting hoặc VPS bạn đang xài không có vấn đề gì xảy ra cả. Nhưng nếu số bạn đen thì mọi thứ đen tối đều có thể xảy ra (cháy nổ server, lũ lụt, sét đánh, bị đánh bom, máy bay rới trúng….) chính vì thế chúng ta cần phải backup thường xuyên “Cẩn tắc vô ái náy”.

Thông thường, nếu như website của bạn có lượt comment thường xuyên hoặc bài viết ngày nào cũng có thì có thể backup 1 ngày/lần. Nếu không thường xuyên thì 3 ngày/lần. Bạn có thể backup manual (tức tự backup) hoặc dùng 1 trong số các plugin sau đây để backup:

  • WP-DB-Backup: Backup lại core database và các bảng khác nếu có.
  • WP Time Machine: Sẽ backup dữ liệu của bạn, sau đó sẽ sync sang Dropbox hoặc Amazon AWS S3.
  • WordPress Backup: Sẽ backup lại thư mục upload, themes và plugin của bạn.

Chúc các bạn thành công !!!