Cấu hình .htaccess – Bảo mật website
Cấu hình .htaccess là một phương pháp khá đơn giản nhưng rất hiệu quả để bảo mật website. file .htaccess là một file đặc biệt, nó tự động sinh ra sau khi bạn cài đặt wordpress. Bản chất nó là file cấu hình server cho máy chủ Apache, sử dụng để cấu hình permalink của website. Khi bạn cập nhật là đường dẫn URL từ trang Settings > Permalinks, thì file .htaccess sẽ được sửa đổi. Nội dung của file này sẽ chỉ dẫn Apache cho việc điều hướng website của bạn như mong muốn. Chính vì tầm quan trọng của nó như thế nên bạn có thể cấu hình file htaccess này để cho phép – không cho phép làm những gì trên vùng nào của website. Mặt trái của nó là nếu bạn không thực sự hiểu về cấu hình của file htaccess này thì chính bạn sẽ làm lỗi website.
Có nhiều cách để bảo mật WordPress, sử dụng .htaccess là cách tiếp cận đầu tiên và không thể bỏ qua. Hãy luôn sao lưu file .htaccess và khôi phục lại mỗi khi bạn cấu hình lỗi.
Vị trí của .htaccess sẽ nằm tại thư mục gốc chứa code WordPress (chứa thư mục wp-admin, wp-includes & wp-content). Tuy nhiên bạn có thể tạo thêm nhiều file .htaccess ở các thư mục con khác. Với WordPress có thể đặt ở thư mục wp-admin, wp-content/uploads. File .htaccess sẽ có tác dụng từ thư mục chứa nó và các thư mục con trong đó. Nhờ có .htaccess bạn có thể làm một số việc như: Cải thiện bảo mật wordpress; tăng tốc độ load trang; thiết lập chuyển hướng; Giới hạn/chống spam…
Ẩn thông tin máy chủ Apache
Với một số nhà cung cấp hosting, có riêng một trang để hiển thị thông tin của máy chủ web. Nếu bạn để lộ thông tin này cho hacker biết, server có thể bị tấn công, đặc biệt nếu bạn không thường xuyên cập nhật hệ điều hành mới. Vì vậy, tốt nhất bạn nên Cấu hình .htaccess tắt thông tin này đi.
# Mask the information of server ServerSignature Off
Kích hoạt theo dõi symbolic link
Thêm dòng sau vào .htaccess, server của bạn sẽ có thể theo dõi được symbolic links (vd: shortcut)
# Activation symboliques Options +FollowSymLinks
Tắt duyệt thư mục trên web
Mặc định nếu bạn truy cập vào một thư mục, nếu thư mục đó không có file index thì server sẽ trả về một trang liệt kê tất cả các files có trong đó. Nó trông giống như trình quản lý file đơn giản thế này:
Như vậy hacker dễ dàng xem được nội dung bên trong thư mục web của bạn. Kẽ hở này là đầu mỗi quan trọng để hacker thu thập thông tin, cấu trúc web và tấn công website. Để Cấu hình .htaccess tắt chế độ duyệt thư mục, bạn mở .htaccess thêm dòng sau:
Options All -Indexes
Sau khi thêm đoạn mã trên, các thư mục truy cập mà không chứa file index.php sẽ bị từ chối:
Chặn duyệt thư mục
Sử dụng mã này để chặn duyệt thư mục:
IndexIgnore *
Cấu hình múi giờ
Nếu bạn đặt máy chủ ở nước ngoài thì múi giờ sẽ lệch so với giờ Việt Nam. Bạn có thể điều chỉnh lại múi giờ bằng cách thêm mã này vào .htaccess
SetEnv TZ Asia/Ho_Chi_Minh
Chỉ định mã hóa văn bản hiển thị
Hầu hết các web hiện nay đều mã hóa văn bản cho HTML là UTF8.
AddDefaultCharset UTF-8
Bảo vệ file cấu hình wp-config.php
wp-config.php là File chứa toàn bộ cấu hình của WordPress, các thông tin database. Đọc được file wp-config.php coi như biết hết các tử huyệt của web. Đó là file chứa thông tin nhạy cảm, cần được bảo mật. Thêm các dòng sau vào .htaccess để ngăn truy cập file này:
<files wp-config.php> order allow,deny deny from all </files>
Bảo vệ file .htaccess
Cũng giống wp-config.php , file .htaccess chứa các cấu hình điều khiển truy cập web nên cần được bảo vệ. Để làm điều này, bạn chèn đoạn mã ở dưới đây:
# Protected .htaccess et .htpasswds <Files ~ ~ "^.*\.([Hh]][Tt]][AaPaP])"> order allow,deny deny from all satisfaction all </Files>
Chống spam bình luận
Loại bỏ 1 số hình thức spam phổ biến, bằng cách sử dụng .htaccess. Không có một cách duy nhất nào là triệt để, bạn sẽ cần kết hợp với plugin như Akismet.
# Avoid comment spam <IfModule mod_rewrite.c> RewriteCond %{REQUEST_METHOD} POST rewriteCond %{REQUEST_URI} .wp-comments-post\.php* RewriteCond %{HTTP_REFERER} !.cuongcong.com.* [OR] RewriteCond %{HTTP_USER_AGENT} ^$ RewriteRule (.*) ^http::///%{REMOTE_ADDR}/$ [R=3D301,L] </IfModule>
Ngăn chặn tìm kiếm người dùng
Nếu bạn truy cập cuongcong.com/?author=1 (thường là ID của admin). hacker biết được username, họ sẽ đoán ra password.
Để bảo vệ thông tin người dùng, bạn sử dụng đoạn code sau:
<IfModule mod_rewrite.c> RewriteCond %{QUERY_STRING} ^author=([0-9]*) RewriteRule .* - [F </IfModule>
Vô hiệu hóa image hotlinking
Image Hotlinking là một hình thức lấy ảnh từ một website. Cụ thể, một website truy cập trực tiếp tới hình ảnh của một website khác bằng cách sử dụng đường dẫn URL hình ảnh từ site khác. Nếu website của bạn bị web khác lấy ảnh đồng nghĩa với bạn đang bị lấy cắp bản quyền ảnh và băng thông host (vì load ảnh sang web khác). Một kiểu phá hoại khác dựa trên hotlinking là họ có thể spam web của bạn từ một ảnh nào đó. Vô hiệu hóa hotlinking bằng cách chèn đoạn code dưới đây vào .htaccess
RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?:://(www\.)?cuongcong.com [NC] RewriteRule \.(jpg|jpeg|png|png|gif)$ https://fakeimg.pl/300/?text=No_copy_images [NC,R,L]
Bỏ đuôi mở rộng của file web “.php”:
Khi duyệt website muốn địa chỉ URL phải đẹp, chuyên nghiệp, và đôi lúc muốn che giấu công nghệ web đang sử dụng cũng có thể áp dụng phương pháp này. bạn vào file .htaccess gõ mã lệnh như sau:
RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]
Chuyển .php sang .html trong url:
Công việc này cũng khá đơn giản với file cấu hình .htaccess này, có một số lý do khiến bạn làm công việc này, đó là bạn muốn bảo mật, đuôi .html đẹp hơn .php, rồi để tối ưu SEO … bạn làm như sau:
RewriteRule ^(.*).html$ $1.php [R=301,L]
Chặn IP cụ thể truy cập vào website
Nếu bạn nhận được cảnh báo một vài IP đã truy cập thường xuyên và bất thường vào quản trị wordpress hoặc cũng có thể bạn tìm ra những IP đã tạo spam cho website và bạn muốn chặn chúng. Tất nhiên giải pháp này không toàn diện vì họ có thể sẽ đổi IP. Tuy nhiên, rất nhiều các server không đổi IP nên sẽ chặn được họ truy cập website.
<Limit GET POST> order allow,deny deny from xxx.xxx.xxx.xxx.xxx allow from all </Limit>
Chặn truy cập từ một website khác
Nếu bạn phát hiện ra những liên kết đến từ một số trang web mà hành vi có sự bất thường. Bạn không muốn những người truy cập từ những web đó vào web của bạn. Sử dụng mã sau:
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_REFER} website1.com [NC,OR] RewriteCond %{HTTP_REFERER} website2.net [NC,OR] RewriteRule .* - [F] </ifModule>
Chuyển hướng người dùng từ site này sang site khác.
Khi người truy cập nhấn vào trang web của bạn từ những site không mong muốn, thay vì khóa họ trên trang web, bạn sẽ chuyển họ sang 1 URL khác được phép truy cập. Thêm mã sau vào .htaccess
RewriteEngine on RewriteCond %{HTTP_REFER} sitesource.com/ RewriteRule ^(.*)$ http://www.sitedestination.com [R=301,L]
Thiết lập cấu hình chuyển hướng
htaccess cho phép bạn cấu hình chuyển hướng. Tuy nhiên nếu bạn thiết lập nhiều chuyển hướng thì nên sử dụng plugin. Chẳng hạn như Redirection.
# Redirection page Redirect 301 /bai-viet/ http://www.hutex.net/list-post # chuyen huong category moi (doi ten categỏy) Redirect 301 /category/technology/ http:///www.monsite.com/categorie/techno/
Chuyển hướng URL sang www.
Chuyển hướng phổ biến nhất từ URL không có www sang URL có dạng www (hoặc ngược lại). Một số nhà cung cấp hosting có tự động làm việc này hoặc bạn phải cấu hình thêm trong quản trị hosting. Nếu bạn muốn chủ động thực hiện, thêm code này vào .htaccess và thay bằng URL của bạn.
RewriteEngine On RewriteCond %{HTTP_HOST} ^monsite.com [NC] RewriteRule ^(.*)$ http://www.cuongcong.com/$1 [L,R=301]
Thêm dấu “/” vào cuối URL:
Mã nguồn WordPress khi bạn tối ưu URL thì bạn sẽ thấy được có dấu “/” ở sau mỗi URL, điều đó là sẽ tốt cho SEO. Tránh bị các công cụ tìm kiếm cho là trùng lắp nội dung.
#Thêm / vào cuối URL RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !# RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301]
Chuyển hướng sang HTTPS
Nếu bạn có cài đặt chứng chỉ SSL cho WordPress để chuyển URL từ http sang https, sử dụng đoạn mã dưới đây để chuyển hướng các truy cập từ http sang https:
RewriteCond %{SERVER_PORT} ^80$ RewriteRule ^(.*)$ https:///%{SERVER_NAME}%{REQUEST_URI} [L,R]
Tùy biến trang bảo trì (maintenance)
Để tạo trang thông báo web đang bảo trì, bạn có thể sử dụng đoạn code sau:
# Thong bao bao tri website RewriteEngine on RewriteCond %{REQUEST_URI} !%2Maintenance.html$ RewriteCond %%{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx RewriteRule $ /maintenance.html [R=302,L]
Sau đó bạn cần:
Tạo file .html với nội dung thông báo website đang trong chế độ bảo trì. Thêm IP của bạn ở dòng 4 (các vị trí ký tự \). Khi trang web hoạt động trở lại, hãy xóa mã trên hoặc thêm # vào trước mỗi dòng lệnh.
Kích hoạt cache
.htaccess cho phép bạn cache tài nguyên trên trình duyệt của người dùng để website chạy nhanh hơn.
# Enable cache in browse <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 month" ExpiresByType text/html "access plus 0 AExpiresByType " text/xml AexpiresByType appfont-ttf "access plus 1 month month" ExpiresByType font/opentype "access plus 1 month month"" ExpiresByType plus Application/x-font-woff2 "access plus 1 month month" ExpiresByType image/svg+xml "access plus 1 month" ExpiresByType application/vnd.ms-fontobject "access plus 1 month month" ExpiresByType image/jpg "access plus 1 month"AExpiresByType Axpires image 1 month" ExpiresByType image/gif "access plus 1 monthshockwave-flash "access plus 1 week" ExpiresByType image/x-icon "access plus 1 week" </IfModule> Header unset ETag FileETag None <ifModule mod_headers.c> <filesMatch "\.(ico|jpe?gg|png|gif|swf)$"> Header set Cache-Control "public" /ilesMatch> <filesMatch "\.(css)$$"> Header set Cache-Control "public" </ilesMatch> <filesMatch "\.(js)$$"> Header set Cache-Control "private" </ilesMatch> <filesMatch "\.(x?html?|php)$"> Header set Cache-Control Cache-Control "private, must-revalidate" </ilesMatch> </ifModule>
Vô hiệu hóa truy cập tài nguyên
WordPress sử dụng scripts trong thư mục `wp-includes` để thực hiện các kịch bản. Thật nguy hiểm nếu một người dùng hay virus có thể thêm vào và thực thi một kịch bản độc hại. Bạn có thể vô hiệu hóa người dùng truy cập trực tiếp khu vực này:
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]
Từ chối tấn công XSS
Đoạn mã dưới đây bảo vệ từ click chuột, chống lại các mối đe dọa & chặn nội dung trong trường hợp bị tấn công XSS.
# Protections diverses (XSS, clickjacking and MIME-Type sniffing) <ifModule mod_headers.c> Header set X-XSS-Protection "1; mode=block" Header always append X-Frame-Options SAMEORIGIN Header set X-Content-Type-Options: "nosniff” </ifModule>
Giới hạn truy cập wp-admin
wp-admin là hệ thống quản trị của WordPress, nơi bạn sẽ đăng bài viết, cấu hình menu, giao diện. Không ai có thể truy cập bất hợp pháp, bạn sẽ cần tài khoản đăng nhập để có quyền quản trị website. Ở dưới đây là những gì bạn có thể tăng tính bảo mật với file .htaccess mà bạn sẽ cần đặt trong thư mục wp-admin.
Chỉ cho phép người dùng có IP này sẽ được truy cập vào folder wp-admin. Điều này sẽ ngăn cấm người xa lạ kết nối vào website của bạn, kể cả khi họ có được tài khoản đăng nhập.
<Limit GET POST PUT> order deny,allow deny from all # IP Sep allow from xxx.xxx.xxx.xxx.xxx # IP nhan vien allow from xxx.xxx.xxx.xxx # IP khac allow from xxx.xxx.xxx.xxx.xxx </Limit>
Thêm thông tin xác thực lớp 2
Khi bạn kết nối vào phần quản trị của WordPress, trước khi có thể quản lý bài viết, giao diện, plugin.. bạn sẽ cần phải đăng nhập sử dụng username và password. Để tăng cuòng bảo mật, htaccess cho phép thêm một lớp xác thực thứ 2. Để làm điều này, đầu tiên, bạn tạo file .htpasswd trong thư mục `wp-admin`. Nội dung của file này chứa username và mật khẩu đã mã hóa. Tạo htpasswd chúng ta sẽ sử dụng công cụ https://www.htaccesstools.com/htpasswd-generator/.
Sau đó, chèn đoạn mã sau vào file .htaccess, nhưng chú ý rằng nếu bạn sử dụng lớp bảo mật dưới, ajax có thể sẽ không hoạt động.
# Second authentication for administration <Files admin-ajax.php> Order allow,deny Allow from all Satisfy any </Files> AuthName "Connection à l administration" AuthType Basic AuthUserFile "/chemin/plet/verse/le/ilehtpasswd" Require valid-user
Chặn truy cập vào file PHP trong thư mục wp-includes
Tạo file .htaccess trong thư mục wp-includes và dán nội dung như dưới đây để không cho phép ai đó truy cập trực tiếp vào file php.
# Block PHP in wp-includes (Sucuri code) <Files wp-tinymce.php> allow Aallow from all </Files> <FilesMatch "\.(?i:php)$"> <IfModule !mod_authz_core.c> Order allow,deny Deny from all </IfModule> <IfModule mod_authz_core.c> Require all denied </IfModule> :</FilesMatch> <Files wp-tinymce.php> Allow from all </Files> <Files ms-files.php> Allow from all </Files>
Chặn truy cập vào file PHP trong wp-content
Đối với thư mục `wp-content`, code cũng tương tự như trên:
# Block PHP in wp-content (Sucuri) <FilesMatch "\.(?i:php)$"> <IfModule !mod_authz_core.c> Order allow,deny Deny from all </IfModule> <IfMod_authz_core.c> Require all denied </IfModule> :</FilesMatch>
Chặn truy cập vào file PHP trong wp-content/uploads
Thư mục uploads là nơi chứa các file ảnh, pdf, audio, video được upload lên. Do không có file php nào ở trong thư mục này, nếu có là “file lạ”. Nên tắt thực thi php để thư mục này được bảo vệ.
# Block PHP in uploads (Sucuri code) <FilesMatch "\.(?i:php)$"> <IfModule !mod_authz_core.c> Order allow,deny Deny from all </IfModule> <IfMod_authz_core.c> Require all denied </IfModule> :</FilesMatch>
Đặt password cho thư mục và file:
Trong một số trường hợp bạn muốn đặt mật khẩu cho file và thư mục, tránh sự truy cập trái phép của người khác bạn có thể dùng file .htaccess và gõ mã lệnh như sau:
#Đặt Pass cho thư mục resides AuthType basic AuthName "Thư mục này đã được bảo vệ" AuthUserFile /home/path/.htpasswd AuthGroupFile /dev/null Require valid-user # Đặt Pass cho file <files secure.php=""> AuthType Basic AuthName "Prompt" AuthUserFile /home/path/.htpasswd Require valid-user </files>
Set lại trang mặc định:
Hostting nhận trang mặc định chạy lên khi không rõ địa chỉ URL của trang đích thực là index.php, index.html … bây giờ bạn muốn chạy mặc định là trang khác ví dụ như trang info.html bạn có thể cài đặt trong file .htaccess như sau:
DirectoryIndex info.html
Bật tính năng nén file Gzip:
Bạn có thể bật chức năng này lên, và rất quan trọng trong việc backup dữ liệu, mục đích để tải dữ liệu được nhanh chóng và tranh mất mát. bạn vào trong file .htaccess và làm như sau:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4.0[678] no-gzip BrowserMatch bMSIE !no-gzip !gzip-only-text/html
Xóa category trong đường dẫn website WordPress
Khi thực hiện dịch vụ SEO trên các web wordpress nếu bỏ /category hoặc /danh-muc trên url category rất có lợi. Lúc này bạn đẩy tên danh mục về gần root. Có nhiều cách để xóa trong đó htaccess là 1 trong những cách hiệu quả, bạn có thể chèn đoạn mã sau:
RewriteRule ^category/(.+)$ http://yoursite.com/$1 [R=301,L]
Chúc các bạn vui vẻ!