15 .htaccess snippet hữu ích cho WordPress site

Tập tin .htaccess là một tập tin quan trọng đối với WordPress site. Nếu nó được cấu hình một cách chính xác nó sẽ giúp bạn tăng cường bảo mật và giảm thiểu các lỗ hổng trên WordPress site của mình. Vậy bạn có muốn biết cách cấu hình tập tin .htaccess cho WordPress site của mình. Trong bài viết này tôi sẽ chia sẻ 15 .htaccess snippet hữu ích dành cho WordPress site của bạn.

Thường thì mục đích chính của việc tuỳ chỉnh tập tin .htaccess là tăng cường bảo mật, làm cho trang web của bạn khó bị tấn công hơn. Nhưng nó cũng là một cách tuyệt vời để xử lý chuyển hướng và các tác vụ có liên quan đến bộ nhớ cache.

Tập tin .htaccess là tập tin cấu hình được sử dụng trên các máy chủ Apache. Hầu hết các website WordPress đều chạy trên máy chủ Apache, số còn lại chạy Nginx. Trong bài viết này bạn có thể tìm thấy các .htaccess snippet dùng để bảo mật cho WordPress site và các tính năng hữu dụng khác.

Đừng quên sao lưu lại tập tin .htaccess trước khi bạn chỉnh sửa nó để đề phòng khi có sự cố xảy ra bạn có thể dễ dàng khôi phục về phiên bản trước đó.

Và nếu như bạn là người mới, trước giờ chưa từng cấu hình tập tin .htaccess một cách thủ cộng, bạn có thể sử dụng plugin BulletProof Security. Đây là plugin bảo mật tập tin .htaccess miễn phí đáng tin cậy và có mặt từ lâu trên thị trường.

Tạo WordPress .htaccess mặc định

.htaccess hoạt động dựa trên một thư mục, có nghĩa là mỗi thư mục có thể có một tập tin .htaccess của chính nó. Điều ít gặp nhưng vẫn có thể xảy ra là WordPress site của bạn không có tập tin .htaccess. Nếu bạn không tìm thấy tập tin .htaccess trong thư mục gốc của WordPress site, bạn có thể tạo một tập tin trống có tên là .htacess.

Dưới đây, bạn có thể tìm thấy tập tin .htaccess mặc định được dùng trong WordPress. Bất cứ khi nào bạn cần dùng đến đoạn code này bạn có thể tìm thấy nó trong WordPress Codex một cách nhanh chóng và dễ dàng. Lưu ý rằng có một sự khác biệt giữa tập tin .htaccess của WordPress Multisite với tập tin .htaccess chưa kích hoạt Multisite.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Dòng bắt đầu với ký tự # là phần giải thích, ghi chú. Đừng chỉnh sửa bất kỳ thứ gì nằm giữa #BEGIN WordPress#END WordPress. Thêm tuỳ chỉnh cho tập tin .htaccess bên dưới các dòng lệnh này.

Tất cả các code snippets (đoạn mã) bạn có thể tìm thấy trong bài viết này sẽ được lưu trữ trong tập tin .htaccess nằm trong thư mục gốc của WordPress site.

Từ chối truy cập tất cả các tập tin .htaccess

Đoạn code bên dưới từ chối truy cập vào tất cả các tập tin .htaccess bạn đã cài đặt trong website WordPress của mình. Với cách này, bạn có thể ngăn chặn người dùng truy cập vào tập tin cấu hình trên máy chủ web của bạn.

# Denies access to all .htaccess files
<Files ~ “^.*\.([Hh][Tt][Aa])”>
Order Allow,Deny
Deny from all
Satisfy all
</Files>

Bảo vệ tập tin wp-config.php của bạn

Tập tin wp-config.php chứa tất cả các cấu hình của WordPress site của bạn, gồm cả mật khẩu đăng nhập cơ sở dữ liệu. Bạn có thể từ chối hoặc chỉ cho phép những người có quyền quản trị mới có thể truy cập nó.

Hãy thêm đoạn code bên dưới vào tập tin functions.php của bạn:

# Protects wp-config
<Files wp-config.php>
Order Allow,Deny
# Allow from xx.xx.xx.xxx
# Allow from yy.yy.yy.yyy
Deny from all
</Files>

Bạn cần bỏ dấu # và thay xx.xx.xx.xxx bằng địa chỉ IP quản trị của mình.

Ngăn tấn công XML-RPC DDoS

Theo mặc định, WordPress hỗ trợ XML-RPC, đây là một giao thức cho phép bạn có thể xuất bản bài viết từ xa. Tuy nhiên bên cạnh là một tính năng tuyệt vời nó cũng là một trong những lỗ hổng bảo mật nghiêm trọng mà tin tặc có thể khai thác để thực hiện các cuộc tấn công từ chối dịch vụ (DDoS).

Nếu bạn không muốn sử dụng tính năng này, tốt nhất là nên tắt nó đi.

Chỉ cần thêm đoạn code bên dưới vào tập tin .htaccess và lưu lại là được.

# Protects XML-RPC, prevents DDoS attack
<FilesMatch “^(xmlrpc\.php)”>
Order Deny,Allow
# Allow from xx.xx.xx.xxx
# Allow from yy.yy.yy.yyy
Deny from all
</FilesMatch>

Cũng như ở trên, bạn có thể thêm ngoại lệ bằng cách bỏ dấu # và thay xx.xx.xx.xxx bằng địa chỉ IP quản trị của mình.

 4 Bảo vệ khu vực quản trị của bạn

Bạn cần bảo vệ khu vực quản trị của mình bằng cách chỉ cho phép người dùng có quyền quản trị mới được truy cập vào WordPress Dashboard.

Sử dụng đoạn code bên dưới sẽ giúp bạn dễ dàng làm được điều này

# Protects admin area by IP
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName “WordPress Admin Access Control”
AuthType Basic
<LIMIT GET>
Order Deny,Allow
Deny from all
Allow from xx.xx.xx.xxx
Allow from yy.yy.yy.yyy
</LIMIT>
Lưu ý là bạn cần phải thêm ít nhất một ngoại lệ Allow nếu không ngay cả chính bạn cũng không thể nào truy cập được vào khu vực quản trị WordPress của mình.

5 Ngăn chặn liệt kê thư mục

Hầu hết các WordPress site đều không tắt tính năng liệt kê thư mục (directory listing), điều đó có nghĩa là tất cả mọi người đều có thể duyệt các thư mục và tập tin trên website của bạn bao gồm cả các tập tin được upload và các plugin. Có thể nói rằng đây là một lỗ hổng bảo mật vô cùng nghiêm trọng.

Hình minh hoạ bên dưới có thể giúp bạn dễ dàng hình dung trong thực tế WordPress liệt kê thư mục như thế nào.

wordpress directory list

Tin vui là bạn chỉ cần sử dụng một dòng code là có thể khoá tính năng này. Dòng code này sẽ trả về thông báo lỗi 403 và hiển thị cho người cố truy cập vào các thư mục của bạn.

# Prevents directory listing
>Options -Indexes

6 Ngăn liệt kê tên người dùng

Nếu WordPress permalinks được bật, nó có thể liệt kê tên người dùng bằng cách sử dụng các trang lưu trữ của tác giả. Vì vậy tên người dùng sẽ bị tiết lộ (bao gồm cả tên của người dùng có quyền quản trị). Biết được tên người dùng tin tặc có thể sử dụng nó để thực hiện một cuộc tấn công Brute Force Attacks.

Chèn đoạn code bên dưới vào tập tin .htaccess của bạn để ngăn chặn việt liệt kê tên người dùng

# Prevents username  enumeration
RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]

7 Chặn Spammers và Bots

Đôi khi bạn có thể muốn hạn chế quyền truy cập từ một số địa chỉ IP nhất định. Đoạn mã bên dưới sẽ giúp bạn dễ dàng chặn người gửi spam và bot mà bạn đã biết trước đó.

# Blocks spammers and bots
<Limit GET POST>
Order Allow,Deny
Deny from xx.xx.xx.xxx
Deny from yy.yy.yy.yyy
</Limit>
Allow from all

8 Chặn image hotlinking

Mặc dù không phải là một lỗi bảo mật nghiêm trọng nhưng image hotlinking (ăn trộm ảnh) vẫn là một thứ gây khó chịu cho chủ sở hữu blog/website. Mọi người không chỉ sử dụng hình ảnh của bạn mà không được bạn cho phép thậm chí họ còn sử dụng ảnh của bạn cả khi bạn phải bỏ tiền để mua. Điều này cũng làm ảnh hưởng đến tài nguyên máy chủ của bạn nữa.

Với vài dòng code dưới đây bạn có thể ngăn chặn tình trạng ăn trộm ảnh trên blog/website của mình.

# Prevents image hotlinking
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite2.com [NC]
RewriteRule \.(jpe?g?|png|gif|ico|pdf|flv|swf|gz)$ – [NC,F,L]

Hạn chế truy cập trực tiếp vào các tập tin PHP của WordPress Theme và Plugin

Sẽ thật là nguy hiểm nếu người khác có thể gọi các tập tin PHP của WordPress Theme và Plugin trên website của bạn dù nó xảy ra vô tính hay cố ý bởi tin tặc.

Bạn hãy thêm đoạn code bên dưới vào tập tin .htaccess để hạn chế truy cập trực tiếp và các tập tin PHP của WordPress Theme và Plugin.

# Restricts access to PHP files from plugin and theme directories
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php
>RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/
RewriteRule wp-content/plugins/(.*\.php)$ – [R=404,L]
RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/
RewriteRule wp-content/themes/(.*\.php)$ – [R=404,L]

10 Thiết lập các chuyển hướng vĩnh viễn

Bạn có thể dễ dàng xử lý các chuyển hướng vĩnh viễn bằng cách sử dụng .htaccess. Đầu tiên bạn phải thêm URL cũ, sau đó theo URL mới trỏ đến trang bạn muốn chuyển hướng người dùng đến.

# Permanent redirects
Redirect 301 /url1_cũ/ http://yoursite.com/url1_mới
Redirect 301 /url2_cũ/ http://yoursite.com/url2_mới

11 Chuyển người dùng đến trang bảo trì

Nếu bạn nâng cấp, bảo trì website của mình trong một thời gian dài bạn cần tạo một trang bảo trì. Nó sẽ thông báo đến người dùng của bạn biết khi nào họ có thể quay trở lại. Tôi đã viết về kỹ thuật này rất chi tiết tại bài viết Cách đặt trang website WordPress vào chế độ bảo trì.

Tuy nhiên bạn có thể sử dụng .htaccess để đặt website của mình vào chế độ bảo trì. Trước khi thêm code vào tập tin .htaccess, bạn cần tạo một trang bảo trì riêng. Ví dụ: bao_tri.html, sau đó copy đoạn code bên dưới dán vào tập tin .htaccess.

# Redirects to maintenance page
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.html [R=503,L]
</IfModule>

12 Hạn chế các truy cập vào thư mục wp-includes

Thư mục /wp-includes chứa các tập tin quan trọng của WordPress. Đây là nơi chứa các tập tin cần thiết cho sự hoạt động của WordPress site. Thư mục này không chứa nội dung, plugin, theme hay bất cứ thứ gì khác cho người dùng, nó chỉ chứa các tập tin hệ thống. Vì vậy bạn cần hạn chế các truy cập vào thư mục này để tăng cường bảo mật cho WordPress site.

Để làm được điều này, bạn chỉ cần thêm đoạn code bên dưới vào tập tin .htaccess:

# 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>

13 Chặn Cross Site Scripting (XSS)

XSS là một kiểu tấn công phổ biến. Nó cho phép tin tặc chèn những đoạn script độc hại (thông thường là Javascript hoặc HTML) vào website của bạn và các mã độc này được thực thi ở phía người dùng (trong trình duyệt web của người dùng).

Để tăng cường bảo mật cho website của mình, bạn cần phòng chống XSS.

Hãy thêm đoạn mã bên dưới vào tập tin .htaccess để thực hiện điề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>

14 Bật bộ nhớ đệm của trình duyệt

Như tôi đã đề cập ở phần trên, .htaccess không chỉ giúp bạn tăng cường bảo mật cho website của mình mà nó còn có thể giúp bạn quản lý bộ nhớ đệm. Khi bật tính năng này, khách truy cập của bạn không cần phải tải lại các tập tin vì nó đã được lưu lại.

Thêm đoạn code bên dưới vào tập tin .htaccess để bật bộ nhớ đệm của trình duyệt:

# Enables browser caching
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg “access 1 year”
ExpiresByType image/jpeg “access 1 year”
ExpiresByType image/gif “access 1 year”
ExpiresByType image/png “access 1 year”
ExpiresByType text/css “access 1 month”
ExpiresByType application/pdf “access 1 month”
ExpiresByType text/x-javascript “access 1 month”
ExpiresByType application/x-shockwave-flash “access 1 month”
ExpiresByType image/x-icon “access 1 year”
ExpiresDefault “access 2 days”
</IfModule>

15 Thiết lập trang thông báo lỗi tùy chỉnh

Bạn có thể dùng .htaccess để thiết lập trang thông báo lỗi tùy chỉnh trên WordPress site của mình. Để nó có thể hoạt động, bạn cần tạo trang thông báo lỗi tùy chỉnh cho WordPress site của mình và upload nó vào thư mục gốc của website (Ví dụ: custom-403.html, custom-404.html).

Bạn có thể thiết lập một trang thông báo lỗi tùy chỉnh cho bất cứ mã trạng thái lỗi HTTP nào (các mã trạng thái lỗi 4XX và 5XXX) mà bạn muốn.

# Sets up custom error pages
ErrorDocument 403 /custom-403.html
ErrorDocument 404 /custom-404.html

Tôi hy vọng rằng các mã .htaccess trên sẽ hữu ích đối với bạn trong việc tăng cường bảo mật cũng như tối ưu hóa cho website WordPress của mình.

Nếu bạn thấy bài viết hữu ích đừng quên Like và Share.

Hẹn găp lại bạn trong các bài viết tiếp theo./.

Đăng ký nhận bài viết mới nhất

Hãy đăng ký nhận tin để nhận được những nội dung thú vị và tuyệt vời!

Để lại bình luận