Đây là danh sách tổng nên đưa vào Cache Rules trong Cloudflare để loại bỏ các trang không nên cache trong WordPress. Nguyên tắc cơ bản là các trang cần phải động, cần có thông tin theo thời gian thực thì không bao giờ được phép cache (bypass cache). Chúng ta sẽ phân tích từng cái một.
(http.request.uri.path contains "/wp-admin")
or (http.request.uri.path contains "/wp-login.php")
or (http.request.uri.path contains "/wp-json/")
or (http.request.uri.query contains "rest_route=")
or (http.request.uri.path contains "/xmlrpc.php")
or (http.request.uri.path contains "/wp-cron.php")
or (http.request.uri.query contains "doing_wp_cron=")
or (http.cookie contains "wordpress_logged_in_")
or (http.cookie contains "wp-postpass_")
or (http.cookie contains "wordpress_sec_")
or (http.cookie contains "comment_author_")
or (http.request.uri.query contains "replytocom=")
or (http.request.uri.query contains "unapproved=")
or (http.request.uri.query contains "moderation-hash=")
or (http.request.uri.query contains "preview=")
or (http.request.uri.query contains "preview_id=")
or (http.request.uri.query contains "preview_nonce=")
or (http.request.uri.query contains "customize_changeset_uuid")
or (http.request.uri.query contains "customize_preview=")
or (http.request.uri.query contains "customize=")
or (http.request.uri.query contains "_wpnonce")
or (http.request.uri.query contains "action=")
or (http.request.uri.query contains "s=")
or (http.request.uri.query contains "elementor-preview")
or (http.request.uri.query contains "fl_builder")
or (http.request.uri.query contains "et_fb")
or (http.request.uri.query contains "vc_editable")
or (http.request.uri.query contains "bricks=")
or (http.request.uri.query contains "tve=")
or (http.request.uri.query contains "brizy-edit")
1. Trang admin
(http.request.uri.path contains "/wp-admin")
Tại sao trang này không nên cache? Đơn giản là vì khu vực admin luôn cần phản hồi theo thời gian thực, ví dụ khi bạn cài plugin, theme, hoặc chỉnh sửa bài viết. Trong danh sách các trang không được phép cache, trang admin của WordPress luôn được nêu lên đầu tiên.
2. Trang đăng nhập
(http.request.uri.path contains "/wp-login.php")
Việc cache trang đăng nhập sẽ phá vỡ nhiều chức năng lõi của khu vực đăng nhập, trong đó có nhiều cái liên quan đến bảo mật. Do vậy trang login cũng tuyệt đối không được cache.
3. Trang liên quan đến /wp-json/
(http.request.uri.path contains "/wp-json/")
WordPress cần wp-json phải động, vì nó liên quan đến tác vụ liên tục cần cập nhật theo thời gian thực, ví dụ như khi chỉnh sửa bài viết.
4. Anh em song sinh của wp-json
(http.request.uri.query contains "rest_route=")
Một cách gọi liên quan đến wp-json khác mà chúng ta cũng phải bypass cache.
5. xmlrpc.php
(http.request.uri.path contains "/xmlrpc.php")
Thường xmlrpc.php cần block vì nó có yếu tố nguy cơ bảo mật cao, nhưng plugin Jetpack hiện vẫn dùng nó, nếu bắt buộc dùng thì bạn cần bypass cache cho file này, nếu không thì không cần quan tâm, và phần cài đặt bảo mật thông qua waf của Cloudlare hoặc/và server nên block luôn file xmlrpc.php
6. wp-cron.php
(http.request.uri.path contains "/wp-cron.php")
Vì file này liên quan đến nhiệm vụ lập lịch tự động thực hiện các nhiệm vụ cụ thể. Nếu bị cache, lịch của nó sẽ bị đóng băng.
Còn cái này:
(http.request.uri.query contains "doing_wp_cron=")
wp-cron cho một tác vụ cụ thể có thể có đường dẫn như sau:
your-site.com/wp-cron.php?doing_wp_cron=111
Cloudlfare sẽ coi: ?doing_wp_cron=111 ở đằng sau là một đường dẫn mới cần cache, kết quả là cache có thể bị đầy lên rất nhanh, do vậy cũng cần phải bypass.
7. Các cookie người dùng đăng nhập
or (http.cookie contains "wordpress_logged_in_")
or (http.cookie contains "wordpress_sec_")
or (http.cookie contains "wp-postpass_")
or (http.cookie contains "comment_author_")
Đây là các cookie liên quan đến người dùng đã đăng nhập (wordpress_logged_in_ & wordpress_sec_) hoặc người dùng trả lời bình luận (comment_author_) hoặc người dùng đang vào khu vực bài viết có pass (wp-postpass_). Tất cả các khu vực này cần phản hồi theo thời gian thực, do vậy không được phép cache.
8. Người dùng trả lời bình luận
or (http.request.uri.query contains "replytocom=")
or (http.request.uri.query contains "unapproved=")
or (http.request.uri.query contains "moderation-hash=")
Khi một đường dẫn chứa các query trên nó là dấu hiệu cho thấy trang đang làm việc với khu vực bình luận của người dùng, và nghĩa là yếu tố thời gian thực cần được tôn trọng (nếu không phản hồi sẽ bị cache và hiển thị cho người không liên quan).
9. Xem trước bài
or (http.request.uri.query contains "preview=")
or (http.request.uri.query contains "preview_id=")
or (http.request.uri.query contains "preview_nonce=")
Khi một đường dẫn chứa các query trên, nó là dấu hiệu cho thấy người dùng đang xem trước một nội dung đang chỉnh sửa (thời gian thực). Đặc điểm là nội dung động, riêng tư & mang tính thời điểm do vậy cũng cần bỏ qua cache.
10. Chỉnh sửa giao diện
or (http.request.uri.query contains "customize_changeset_uuid")
or (http.request.uri.query contains "customize_preview=")
or (http.request.uri.query contains "customize=")
Bộ quy tắc query này liên quan đến việc khi người dùng chỉnh sửa theme thì họ phải nhìn thấy kết quả chỉnh sửa theo thời gian thực thay vì kết quả cache.
11. wpnonce
(http.request.uri.query contains "_wpnonce")
Nó là chìa khóa dùng một lần cho mỗi hành động nhằm xác thực chủ nhân thật sự. Tức là nó là thông tin riêng tư cho mỗi người dùng và mỗi phiên làm việc => không được cache.
12. action
(http.request.uri.query contains "action=")
Trong WordPress khi có các query này là nó liên quan đến các hành động như đăng xuất, đăng ký hoặc liên quan đến chức năng với AJAX (ví dụ xem thêm, danh sách yêu thích, lọc sản phẩm) => Là hành động theo thời gian thực nên không được phép cache.
13. Tìm kiếm
(http.request.uri.query contains "s=")
Hạn chế tạo ra cache rác cho tìm kiếm nếu bị tấn công. Ngoài ra bypass cache tìm kiếm cũng giúp kết quả trả về theo thời gian thực.
Tuy nhiên nó có thể làm phát sinh vấn đề nếu kẻ tấn công có đủ lực để tấn công tần suất cao. Có 2 giải pháp:
- Sử dụng plugin để đẩy data tìm kiếm ra bên ngoài.
- Vô hiệu hóa luôn chắc năng tìm kiếm của WordPress (ít người dùng blog cần chức năng này).
14. Các preview cho công cụ tạo giao diện phổ biến (page builder)
or (http.request.uri.query contains "elementor-preview")
or (http.request.uri.query contains "fl_builder")
or (http.request.uri.query contains "et_fb")
or (http.request.uri.query contains "vc_editable")
or (http.request.uri.query contains "bricks=")
or (http.request.uri.query contains "tve=")
or (http.request.uri.query contains "brizy-edit")
Đây là danh sách tổng hợp các page builder phổ biến, thực tế thì chỉ cần đưa vào cái công cụ cụ thể đang dùng, nhưng để dự phòng cho nhiều người và cho tương lai của kể cả 1 người (họ có thể chuyển page bulder) thì danh sách các loại phổ biến nhất sẽ hữu ích.