Thực thể HTML
Mã hóa và giải mã các ký tự và thực thể đặc biệt HTML
Trường hợp sử dụng
- Thoát nội dung người dùng để an toàn HTML — chuyển đổi `<script>` thành `<script>` trước khi chèn vào một mẫu.
- Đọc mã nguồn email HTML thô — giải mã `&` và `☃` để xem những gì người nhận thực sự thấy.
- Xây dựng các đoạn mã an toàn cho CMS — mã hóa `'` và `"` để một cột cơ sở dữ liệu không làm hỏng ngữ cảnh SQL hoặc HTML.
- Gỡ lỗi báo cáo XSS — giải thoát đầu vào nghi ngờ để khôi phục lại tải trọng gốc mà các công cụ bảo mật đã đánh dấu.
Khi nào bạn cần mã hóa thực thể HTML?
Khi văn bản do người dùng cung cấp được hiển thị trong HTML, các ký tự như `<` và `>` phải được thoát thành `<` và `>` để tránh bị hiểu nhầm là thẻ. Bỏ qua điều này là nguyên nhân gốc rễ của các lỗ hổng XSS. Công cụ sẽ mã hóa năm ký tự không an toàn chính trong HTML cộng với bất kỳ Unicode nào bạn chọn để thoát.
Các thực thể số (`&`, `&`) hoạt động trong bất kỳ ngữ cảnh HTML nào. Các thực thể có tên (`&`, `©`) dễ đọc hơn nhưng chỉ hoạt động trong HTML — các bộ phân tích XML không biết tất cả các tên HTML.
Ví dụ
| Đầu vào | Kết quả |
|---|---|
| <script>alert('hi')</script> | <script>alert('hi')</script> |
| © 2024 — Wenee | © 2024 — Wenee |
Câu hỏi thường gặp
Những ký tự nào cần mã hóa?
Tối thiểu: `<`, `>`, `&`, `"`, và `'`. Mã hóa nhiều hơn (như tất cả không phải ASCII) là vô hại nhưng làm phình to đầu ra.
Các thực thể có tên hay số thì tốt hơn?
Thực thể có tên (`&`) dễ đọc hơn trong HTML; thực thể số (`&`) hoạt động trong cả HTML và XML. Chọn thực thể số để an toàn giữa các định dạng.
Mã hóa thực thể HTML có giống với mã hóa URL không?
Không — các thực thể HTML sử dụng cú pháp `&...;` cho các ngữ cảnh HTML. Mã hóa URL sử dụng `%XX` cho các ngữ cảnh URL. Chúng phục vụ các lớp khác nhau.
Điều này có ngăn chặn XSS không?
Mã hóa nội dung văn bản trong đầu ra HTML ngăn chặn vector XSS phổ biến nhất. Các ngữ cảnh khác (giá trị thuộc tính, chuỗi JavaScript, CSS) cần các quy tắc thoát riêng.
Văn bản của tôi có được gửi đi đâu không?
Không. Việc mã hóa và giải mã hoàn toàn diễn ra trong trình duyệt của bạn.
