Mã hóa HTML
Chuyển các ký tự đặc biệt thành thực thể HTML để hiển thị dạng văn bản thô.
Khi bạn muốn trình duyệt hiển thị đoạn văn bản <div> thay vì tạo ra một khối phần tử thực tế, bạn bắt buộc phải chuyển đổi ký tự. Quá trình mã hóa HTML sẽ biến các ký tự mang ý nghĩa cấu trúc thành các thực thể tương ứng để hiển thị nguyên vẹn.
Năm ký tự cốt lõi cần mã hóa HTML
Hai ký tự < cùng > dùng để bao quanh thẻ, & bắt đầu một thực thể, còn hai loại dấu ngoặc kép phân tách giá trị thuộc tính. Chỉ cần xử lý năm ký tự này, hầu hết lỗi hiển thị đều được giải quyết.
Dấu và là ký tự hay bị bỏ quên nhất trong thực tế. Ký tự này cần được chuyển đổi trước tiên, bởi nếu bạn xử lý dấu ngoặc nhọn trước, bạn sẽ vô tình mã hóa luôn dấu và bên trong thực thể vừa sinh ra, khiến trang hiển thị nhầm thành &lt;. Thứ tự thực hiện luôn mang tính quyết định.
Các bước sử dụng công cụ mã hóa HTML
- Dán đoạn mã hoặc văn bản bạn muốn hiển thị nguyên bản vào ô nhập liệu.
- Bấm nút mã hóa trên giao diện để gửi nội dung lên máy chủ xử lý.
- Sao chép kết quả chứa các thực thể đã được thay thế an toàn.
- Dán kết quả vào tệp giao diện, mã nguồn hoặc trình biên tập nội dung của bạn.
- Tải lại trang web để kiểm tra văn bản hiển thị đúng dạng chữ thay vì bị trình duyệt hiểu nhầm thành thẻ lệnh.
Bảng tra cứu thực thể mã hóa HTML thông dụng
| Ký tự | Thực thể tên | Thực thể số thay thế |
|---|---|---|
| & | & | & |
| < | < | < |
| > | > | > |
| " | " | " |
| ' | ' | ' |
| non-breaking space | |   |
Vai trò bảo mật của việc mã hóa HTML
Chuyển đổi dữ liệu đầu ra là biện pháp ngăn chặn tấn công cross-site scripting rất quan trọng mà lập trình viên cần tuân thủ. Tuy vậy, thao tác này phải diễn ra đúng thời điểm — ngay lúc kết xuất nội dung ra giao diện — và phù hợp với từng ngữ cảnh cụ thể.
Mã hóa nội dung hiển thị trong văn bản HTML sẽ khác với mã hóa giá trị nằm trong thuộc tính, đồng thời cũng không giống việc xử lý chuỗi cho JavaScript hay đường dẫn URL. Một chuỗi dữ liệu an toàn ở ngữ cảnh này vẫn có thể gây nguy hiểm ở ngữ cảnh khác. Bạn nên tận dụng cơ chế tự động theo ngữ cảnh của các framework hiện đại thay vì chỉ mã hóa một lần trước khi ghi vào cơ sở dữ liệu.
Thắc mắc thường gặp về mã hóa HTML
Mục đích chính của việc mã hóa HTML là gì?
Mục đích là thay thế những ký tự định hình cấu trúc thẻ bằng các thực thể tham chiếu, giúp trình duyệt đọc chúng dưới dạng văn bản bình thường thay vì thực thi mã lệnh.
Những ký tự nào bắt buộc phải xử lý khi mã hóa HTML?
Ít nhất là dấu và, hai dấu ngoặc nhọn so sánh cùng hai loại dấu ngoặc kép. Dấu và phải được xử lý đầu tiên nhằm tránh lỗi biến đổi lặp lại các thực thể khác.
Thao tác mã hóa HTML có ngăn chặn hoàn toàn XSS không?
Đây là một mắt xích thiết yếu nhưng chỉ phát huy tác dụng khi thực hiện đúng lúc kết xuất và đúng ngữ cảnh, vì văn bản HTML, thuộc tính thẻ, mã JavaScript và URL đều có nguyên tắc xử lý riêng.
Ký tự khoảng trắng không ngắt khác gì khoảng trắng thường?
Thực thể này giữ cho hai từ không bị ngắt dòng rời rạc và không bị trình duyệt gộp lại khi đứng cạnh nhau, rất thích hợp khi đặt giữa con số và đơn vị đi kèm.
Nên thực hiện mã hóa HTML trước khi lưu trữ hay khi hiển thị?
Bạn nên lưu trữ dữ liệu thô và chỉ tiến hành mã hóa khi kết xuất ra màn hình, giúp dữ liệu đó có thể tái sử dụng nguyên vẹn cho tệp JSON, bản xuất CSV hay thư điện tử.