Ngôn ngữ đánh dấu siêu văn bản, hay HTML, là ngôn ngữ chính cho các trang web trên internet. Nó bao gồm hỗ trợ cho một số ngôn ngữ khác bổ sung thêm chức năng và kiểu dáng như JavaScript và CSS. Tất cả các ngôn ngữ này đều dựa trên văn bản với một số ký tự có nghĩa được sử dụng để phân tách các chuỗi ký tự sẽ được in ra trình duyệt và mã cần được thông dịch và thực thi.
Tuy nhiên, thiết kế này có một số vấn đề, những vấn đề này trở nên rõ ràng khi bạn muốn in một trong những ký tự có ý nghĩa vào trình duyệt. Các ký tự ví dụ tốt nhất để sử dụng là các ký hiệu “nhỏ hơn” và “lớn hơn”. Tương ứng, những ký hiệu này được sử dụng để mở và đóng các đoạn mã trong HTML. Phương pháp chính xác để in các ký tự này ra màn hình một cách an toàn là sử dụng các thực thể HTML.
Các thực thể HTML và bảo mật
Nhờ những ký tự này có ý nghĩa đặc biệt, bạn phải thực sự cẩn thận để đảm bảo rằng bạn thay thế chúng bằng phiên bản thực thể HTML nếu bạn muốn chúng được in ra trình duyệt. Thật không may, nhiều nhà phát triển web quên rằng người dùng có thể gửi đầu vào cho nhiều trang web. Nếu thông tin người dùng nhập này bao gồm các ký tự có ý nghĩa và chúng không được thay thế bằng các thực thể HTML, trong một quá trình được gọi là sanitisation, thì trang web có lỗ hổng Cross-Site Scripting (XSS).
Mẹo: Đừng thử gửi các ký tự đặc biệt lên các trang web để tìm lỗ hổng XSS. Làm như vậy là hack về mặt kỹ thuật và là một hành vi phạm tội trừ khi bạn được chủ sở hữu của trang web cho phép.
Cách các thực thể HTML hoạt động (và đôi khi không)
Các thực thể HTML hoạt động vì trình duyệt biết hiển thị nó dưới dạng ký tự đặc biệt có liên quan và không coi nó như một ký tự đặc biệt. Tất cả các thực thể HTML đều bắt đầu bằng dấu và “&” và kết thúc bằng dấu chấm phẩy “;”. Hầu hết các ký tự được xác định bằng một số thực thể mặc dù một số ký tự đặc biệt cũng có tên viết tắt. Ví dụ: “&”, “<” và “>” có số thực thể “&”, “<” và “>” cũng như tên thực thể “&”, “<” và “>” tương ứng. Trình duyệt biết rằng các chuỗi này có nghĩa là nó cần hiển thị các ký tự có liên quan.
Mẹo: Bạn có thể tìm thấy danh sách đầy đủ các tên thực thể ký tự tại đây , mặc dù hỗ trợ tên đối tượng khác nhau tùy theo trình duyệt.
Trong hầu hết các trường hợp, người dùng chỉ nên nhìn thấy các ký tự mà các thực thể HTML đại diện. Tuy nhiên, có thể thấy các ký tự được mã hóa, thường là ký hiệu và “&”, thông qua một quá trình được gọi là “Mã hóa kép”. Điều này xảy ra khi ký tự dấu và xuất hiện trong phiên bản mã hóa của chính nó. Mã hóa kép thường xảy ra khi đầu vào được mã hóa chính xác, khi nó được gửi đi, tuy nhiên, khi nó được xuất ra, nó sẽ được làm sạch lại. Điều này dẫn đến ký hiệu và ở đầu "&" được mã hóa lần thứ hai và xuất hiện dưới dạng "& amp;", trình duyệt sau đó sẽ diễn giải chính xác rằng đó là một chuỗi nên được in là "&" đã giải mã thực thể HTML và bỏ qua thực thể một phần.