Nhiệm vụ: Kiểm tra lại việc xử lý URL và giải mã ký tự đặc biệt
Kiểm tra lại việc xử lý URL và giải mã ký tự đặc biệt
Kiểm tra lỗi 404 trên các URL chứa ký tự đặc biệt và tính chính xác của decode/slug routing.
Vấn đề
Trên freecode.academy, một số URL có chứa ký tự đặc biệt dạng percent-encoded có thể trả về lỗi 404, mặc dù trang tương ứng có khả năng vẫn tồn tại.
Ví dụ:
/comments/topics/dzheneriki-typescript/nu-vot-ts-tebe-govorit-%22ty-zanimaeshsya-figney%22,-i
Giả thuyết: tại một trong các bước định tuyến (routing), tìm kiếm bản ghi theo slug hoặc khớp URL, việc giải mã URL (decodeURIComponent hoặc tương đương) đang bị thiếu hoặc thực hiện không chính xác, khiến slug ở dạng đã mã hóa bị đem ra so sánh với giá trị đã giải mã được lưu trữ hoặc ngược lại.
Những điểm cần kiểm tra
- Theo dõi toàn bộ đường đi của URL từ HTTP request đến quá trình tìm kiếm thực thể theo slug:
- framework/router;
- route params;
- server/API handler;
- truy vấn cơ sở dữ liệu (DB);
- tạo canonical URL/đường dẫn liên kết.
- Kiểm tra xem ở giai đoạn nào
%22và các ký tự percent-encoded khác được giải mã tự động, và ở đâu cần gọi giải mã tường minh (explicit decode). - Tránh việc giải mã hai lần (
decodeURIComponentđè lên tham số đã được giải mã), đặc biệt đối với%,%25,%2Fvà các chuỗi nhạy cảm khác. - Đối chiếu định dạng slug trong DB: xem nó được lưu dưới dạng đã giải mã, đã mã hóa hay đã chuẩn hóa.
- Kiểm tra bộ tạo liên kết (link generator): URL phải được mã hóa đúng một lần (
encodeURIComponent/URL API ở những nơi cần thiết). - Kiểm tra riêng biệt các ký tự:
- dấu ngoặc kép
"/%22; - dấu phẩy;
- khoảng trắng /
%20; - tiếng Nga (Cyrillic);
%;?,#,/nằm bên trong slug tiềm năng.
- dấu ngoặc kép
- Kiểm tra các URL cũ đã được xuất bản và tính tương thích ngược. Nếu tồn tại các biến thể lịch sử khác nhau của cùng một slug — thêm chuyển hướng (redirect)/chuẩn hóa canonical thay vì trả về 404 nếu cần.
Trường hợp cụ thể
Đối với URL:
/comments/topics/dzheneriki-typescript/nu-vot-ts-tebe-govorit-%22ty-zanimaeshsya-figney%22,-i
cần tìm hiểu:
- bản ghi có slug tương ứng về mặt logic có tồn tại hay không;
- giá trị route param thực tế mà ứng dụng nhận được là gì;
- giá trị nào được sử dụng trong truy vấn DB;
- lỗi 404 có được khắc phục sau khi chuẩn hóa/giải mã đúng cách hay không.
Tiêu chí nghiệm thu
- Đã tìm ra nguyên nhân chính xác gây ra lỗi 404 cho URL được cung cấp.
- Các URL có ký tự đặc biệt mở đúng các trang đang tồn tại.
- Không có hiện tượng giải mã kép và các lỗi/ngoại lệ liên quan.
- Việc tạo liên kết và đọc route params sử dụng định dạng slug đồng nhất.
- Các URL không hợp lệ vẫn trả về mã 404 chính xác thay vì gây ra lỗi ứng dụng.
- Đã thêm các bài kiểm thử (test) ít nhất cho
%22, tiếng Nga và%25/mã hóa kép. - Đã kiểm tra tính tương thích ngược của các liên kết hiện có; thêm chuyển hướng đến canonical URL nếu cần thiết.
Ворклоги
Tiến độ: Đã triển khai bản vá
Các bản sửa lỗi xử lý URL đã được triển khai lên môi trường production. Dự kiến việc này sẽ khắc phục được phần lớn các lỗi 404 giả mạo liên quan đến URL được mã hóa phần trăm (percent-encoded) và việc thiếu giải mã.
Bước kiểm soát bắt buộc tiếp theo — sau khi tích lũy các yêu cầu mới — là kiểm tra lại nhật ký nội bộ để tìm lỗi 404 và đảm bảo rằng sự cố hàng loạt thực sự đã biến mất, trong khi các lỗi 404 còn lại chỉ thuộc về các trường hợp riêng lẻ.
Để thực hiện việc này, một tác vụ con liên quan đã được tạo với lịch hoàn thành vào ngày 29 tháng 8 năm 2026.