Bảo mật WordPress: 12 việc làm trong 30 phút
Bạn vừa dựng xong một site WordPress và tự hỏi nên làm gì trước tiên khi không rành máy chủ? Bài này lội thẳng vào bảo mật WordPress theo đúng thứ tự rủi ro, kèm cấu hình copy-paste cho wp-config, .htaccess và security headers ở tầng Nginx. Mỗi bước đều kèm lệnh kiểm tra để bạn biết đã làm đúng hay chưa.
Bảo mật WordPress là gì và vì sao nên làm ngay
Bảo mật WordPress không phải một plugin mà là tập hợp thói quen: giấu đường dẫn nhạy cảm, siết mật khẩu, vá lỗ hổng, chặn thư mục nhạy cảm và có bản sao lưu để khôi phục. WordPress chiếm phần lớn thị phần CMS nên luôn là mục tiêu quét tự động, và phần lớn vụ hack bắt đầu từ thông tin đăng nhập yếu hoặc plugin lỗi thời chứ không phải lỗ hổng lõi.
Điểm khác biệt so với website tĩnh là bạn có thêm một lớp PHP cộng hưởng, tức là mã chạy trên máy chủ và mọi plugin đều là “cửa”. Bài này giả định bạn dùng shared hosting hoặc VPS có quyền sửa cấu hình web server. Nếu chưa có môi trường nào, hãy xem hosting — chọn đúng nền tảng giúp bạn có quyền chạm vào Nginx hoặc Apache.
Điều cần chuẩn bị
Cần một bản sao lưu đầy đủ file và database trước khi đụng vào cấu hình, cùng WP-CLI nếu bạn muốn kiểm tra bằng dòng lệnh. Bạn cũng nên chuẩn bị tài khoản admin chính, công cụ đổi mật khẩu và hiểu rằng mọi thay đổi đường dẫn đăng nhập phải lưu lại ở nơi an toàn, vì nếu quên bạn sẽ tự khoá mình ra khỏi trang.
Đổi đường dẫn wp-login và tắt đăng ký thành viên
Bảo mật WordPress bắt đầu ở cửa đăng nhập vì wp-login.php là URL được dò bằng crawler mỗi giây. Hãy dùng plugin WPCerber Security hoặc All In One WP Security & Firewall để đổi đường dẫn thành dạng khó đoán, sau đó đặt redirect 301 từ đường dẫn cũ sang đường dẫn mới. Đồng thời tắt mục “Cho phép đăng ký” trong Cài đặt → Đọc chung, vì tài khoản miễn phí tự đăng ký là đường vào quen thuộc của bot spam.
Kiểm tra sau bước này: mở trình duyết ẩn danh, gõ đường dẫn cũ và phải bị chuyển hướng sang đường dẫn mới; vào trang Cài đặt → Đọc chung xem tùy chọn đăng ký đã tắt. Nhớ đăng xuất rồi đăng nhập lại bằng đường dẫn mới trước khi làm tiếp, tránh trường hợp bị khóa tài khoản giữa chừng.
Mật khẩu mạnh, 2FA và không dùng chung tài khoản admin
Bảo mật WordPress còn phụ thuộc vào chính tài khoản của bạn, và mật khẩu dạng “TenHang2026” là gần như vô hiệu. Dùng trình quản lý mật khẩu tạo chuỗi ngẫu nhiên dài ít nhất 16 ký tự, bật 2FA bằng ứng dụng TOTP cho tài khoản admin, và tạo tài khoản riêng cho từng người quản trị thay vì dùng chung một tài khoản “admin”. Mỗi người nên có tài khoản riêng để bạn thu hồi quyền khi họ nghỉ việc mà không cần đổi cả hệ thống.
Bạn có thể kiểm tra danh sách tài khoản và phân quyền bằng lệnh sau, chạy tại thư mục gốc WordPress, cần shell có quyền đọc wp-config.php và user từ database:
wp user list
Kết quả bình thường là bảng các tài khoản kèm ID, email và vai trò. Nếu thấy tài khoản lạ hoặc nhiều admin hơn dự kiến, hãy xoá ngay và đổi lại toàn bộ mật khẩu, vì dấu hiệu đó thường đi kèm việc site đã bị xâm nhập.
Cập nhật nền tảng, plugin, giao diện và dọn plugin không dùng
Bảo mật WordPress dựa rất nhiều vào việc vá lỗi kịp thời, vì phần lớn plugin bị khai thác nằm ở phiên bản cũ đã có bản vá. Chạy lệnh cập nhật toàn bộ plugin về bản mới nhất bằng WP-CLI, chạy tại thư mục gốc WordPress với quyền ghi vào thư mục plugin:
wp plugin update --all
Sau đó cập nhật WordPress core và giao diện trong Trang quản trị → Cập nhật, rồi xoá hẳn những plugin không còn dùng thay vì chỉ ngừng kích hoạt, vì mã của plugin vẫn còn nằm trên ổ đĩa và có thể bị khai thác qua lỗ hổng zero-day mà chưa cần kích hoạt. Kiểm tra bằng cách vào Cập nhật: không còn mục “Cập nhật đang chờ” và danh sách plugin chỉ còn những cái đang dùng thật.
Chặn truy cập vào wp-config.php, .git và thư mục uploads
Bảo mật WordPress ở tầng web server hiệu quả hơn nhiều so với dựa vào plugin. File wp-config.php chứa toàn bộ thông tin đăng nhập database, nên nó phải bị chặn ở cấp Nginx hoặc Apache thay vì trông chờ plugin. Bạn cũng cần chặn thư mục .git nếu từng deploy bằng Git, và cấm thực thi PHP trong wp-content/uploads vì thư mục này chỉ nên chứa ảnh và tệp tải lên.
Thêm vào server block của Nginx, trong server { ... }, sau đó kiểm tra bằng curl -I https://tenmien.vn/wp-config.php — kết quả đúng là HTTP 403 hoặc 404:
location ~* ^/wp-config\.php$ { deny all; }
location ~ /\.git { deny all; }
location ~* ^/wp-content/uploads/.*\.php$ { deny all; }
location ~* ^/(wp-config\.php|\.git|readme\.html|license\.txt) { deny all; }
Nếu dùng Apache, thêm cùng ý vào .htaccess hoặc dùng thẻ <Files> trong vhost. Lưu ý rủi ro: chặn sai biểu thức có thể làm trang admin không tải được, nên hãy chạy kiểm tra trên bản staging hoặc giữ sẵn quyền SSH để gỡ nhanh. Chi tiết khuyến nghị chính thức của WordPress về hardening nằm ở tài liệu Security APIs.
Security headers ở tầng Nginx hoặc Apache
Bảo mật WordPress hưởng lợi rõ ràng từ security headers vì chúng ép trình duyệt từ chối những kiểu tấn công phổ biến mà lỗ hổng XSS và clickjacking thường lợi dụng. Tối thiểu nên trả về: X-Frame-Options: SAMEORIGIN để chống nhúng khung, X-Content-Type-Options: nosniff, Referrer-Policy: strict-origin-when-cross-origin, và Content-Security-Policy ở dạng báo cáo trước.
Thêm vào server block Nginx rồi nginx -t trước khi reload. Sau khi reload, kiểm tra bằng curl -I https://tenmien.vn và đọc danh sách header trả về, bạn phải thấy đủ các dòng trên. Nếu thấy chưa đủ, hãy kiểm tra có đang có hai lớp reverse proxy cùng ghi header hay không. Tham khảo thêm bài về cache, gzip, HTTP/2 và security headers tại đây.
Bắt buộc SSL/HTTPS và chuyển toàn bộ sang HTTPS
Bảo mật WordPress không hoàn tất nếu còn tồn tại bản HTTP không mã hoá, vì mọi cookie đăng nhập sẽ bay qua mạng thường. Dùng Let’s Encrypt qua Certbot hoặc Cloudflare để có chứng chỉ gia hạn tự động, rồi bật chuyển hướng 301 từ HTTP sang HTTPS ở tầng web server thay vì chỉ dùng plugin, vì plugin không kiểm soát được request không đi qua WordPress.
Kiểm tra bằng curl -I http://tenmien.vn và xác nhận header Location trỏ về https://, sau đó vào Cài đặt → Chung bảo đảm Địa chỉ WordPress cũng dùng https://. Nếu trong wp-config có dòng define('FORCE_SSL_ADMIN', true); thì trang quản trị cũng được ép mã hoá. Nhớ sao lưu trước khi đổi, vì cấu hình sai có thể khiến bạn không đăng nhập được.
Sao lưu tự động file và database, lưu bản sao ở nơi khác
Bảo mật WordPress mà không có bản sao lưu thì chỉ là hoãn thiện tai nạn, bởi hacker hay xoá sạch file sau khi chiếm quyền. Bạn cần hai lớp: bản sao file (wp-content, theme, plugin) và bản sao database, được đẩy lên nơi khác ngoài máy chủ đang chạy để tránh trường hợp kẻ tấn công xoá luôn cả bản sao nằm chung ổ đĩa. Nên chọn plugin có tác vụ cron theo lịch và thử khôi phục thử một lần, vì bản sao không phục hồi được thì coi như không có.
Kiểm tra bằng cách vào Cài đặt → Tự động lưu trữ trong plugin và xem mốc thời gian sao lưu gần nhất có thay đổi không, rồi tải một bản về máy để thử giải nén. Gợi ý thêm: bài về sao lưu tự động cho website tĩnh áp dụng gần như nguyên vẹn cho WordPress.
Dấu hiệu WordPress bị hack và các bước xử lý
Bảo mật WordPress thất bại thường để lại dấu vết khá rõ: trang chủ bị đổi thành nội dung quảng cáo, trang quản trị nhảy cảnh báo “website đã bị nhiễm”, hoặc bạn tự dùng trình duyệt ẩn danh mà thấy nội dung lạ. Ngoài ra hãy để ý tài khoản admin lạ trong wp user list, các thư mục lạ trong wp-content, và việc nhiệm vụ cron tự dừng chạy dù bạn không hề thay đổi lịch.
Khi phát hiện, giữ nguyên hiện trường để phân tích thay vì xoá ngay, bằng cách sao lưu nguyên trạng file và database ra nơi khác. Sau đó cài lại sạch hoặc khôi phục từ bản sao đúng trước thời điểm bị xâm nhập, đổi toàn bộ mật khẩu admin và database, xoá lại khóa muối muối trong wp-config, rồi vá lỗi tận gốc trước khi mở lại cho công chúng. Rủi ro lớn nhất là tái nhiễm từ tệp sao lưu cũ bị nhiễm hoặc từ tài khoản quản trị viên bị chiếm trước đó.
Câu hỏi thường gặp về bảo mật WordPress
Bảo mật WordPress có cần plugin bảo mật không?
Không bắt buộc, và nhiều plugin “bảo mật” chính là nguồn rủi ro mới. Hãy ưu tiên cấu hình ở tầng web server, cập nhật đều đặn và thực đơn vai trò tối thiểu; chỉ thêm plugin khi có nhu cầu cụ thể.
Đổi đường dẫn đăng nhập có thực sự hiệu quả không?
Nó chỉ làm giảm lượng nhiễm tự động, không ngăn chặn kẻ tấn công có chủ đích. Giá trị lớn nhất đến từ việc dùng mật khẩu mạnh, 2FA và giới hạn IP nếu host có hỗ trợ.
Bao lâu tôi nên chạy lại checklist bảo mật WordPress?
Sau mỗi lần cài plugin mới, đổi giao diện hoặc thuê người ngoài quản trị. Ngoài ra hẹn lịch kiểm tra cập nhật hằng tuần và chạy sao lưu tự động hằng ngày.
Mật khẩu database có cần đổi lại không?
Có, và chỉ nên đổi trên bản sau lưu. Nếu kẻ tấn công đã lấy được thông tin đăng nhập, việc đổi mật khẩu WordPress mà quên thay đổi database sẽ khiến chúng vẫn truy cập được.
Kết luận
Làm theo thứ tự này và bạn đã khép lại phần lớn rủi ro phổ biến nhất:
- Ẩn
wp-login.php, tắt đăng ký thành viên, dùng mật khẩu mạnh và bật 2FA. - Chặn
wp-config.php,.gitvà cấm chạy PHP trongwp-content/uploadsở tầng Nginx. - Bật security headers, ép HTTPS 301, cập nhật plugin và xoá hẳn plugin không dùng.
- Có sao lưu file và database đặt ngoài máy chủ, đã thử khôi phục thành công.
- Nếu site bị xâm nhập, khôi phục sạch từ bản sao trước sự cố thay vì vá tại chỗ.
Nếu bạn mới bắt đầu và chưa có hosting phù hợp, hãy xem hosting — chọn nền tảng có sẵn Nginx, Let’s Encrypt và WP-CLI, nhưng nhớ kiểm tra giới hạn CPU ảo hóa của gói giá rẻ trước khi chuyển cả site thật. Bạn có thể đọc thêm checklist hardening trong tài liệu Security APIs của WordPress rồi áp dụng theo từng mục một, mỗi lần một thay đổi nhỏ.