HTML thoát ít hơn

Trình chuyển đổi tìm các ký tự quan trọng trong nguồn HTML và thay thế chúng bằng các thực thể HTML tương ứng

Các ký tự cần thoát trong HTML là

  • foo" onmouseover="alert[1]
    
    4 [dấu và] luôn cần được thoát
  • foo" onmouseover="alert[1]
    
    5 [nhỏ hơn] và '>' [lớn hơn] khi bên trong một phần tử
  • foo" onmouseover="alert[1]
    
    6 [trích dẫn] khi bên trong giá trị thuộc tính được trích dẫn kép
  • foo" onmouseover="alert[1]
    
    7 [dấu nháy đơn] khi bên trong một giá trị thuộc tính trích dẫn đơn. Dấu nháy đơn được thoát thành
    foo" onmouseover="alert[1]
    
    7 thay vì
    foo" onmouseover="alert[1]
    
    7 vì không phải tất cả các trình duyệt đều hiểu
    foo" onmouseover="alert[1]
    
    7
  • foo" onmouseover="alert[1]
    
    1 [dấu gạch chéo] nên được thoát vì nó có thể được sử dụng để chấm dứt một phần tử trong một số ngôn ngữ HTML

Thoát

foo" onmouseover="alert[1]
2 [lớn hơn] là không cần thiết, nhưng kết quả thường dễ đọc hơn nếu lớn hơn cũng được thoát bất cứ khi nào nhỏ hơn

Đây là một ví dụ cổ điển về việc làm cho đầu vào an toàn hơn trong một ngữ cảnh—trong trường hợp này, là nội dung của phần tử

foo" onmouseover="alert[1]
1—mà không xem xét các ngữ cảnh khác mà nó có thể được sử dụng, chẳng hạn như bên trong một giá trị thuộc tính

Escaping &, , and " isn’t enough

Các ký tự

foo" onmouseover="alert[1]
2,
foo" onmouseover="alert[1]
5,
foo" onmouseover="alert[1]
2 và
foo" onmouseover="alert[1]
0 là những ký tự thường được nhắm mục tiêu nhất bởi HTML triển khai trình thoát. Đây dường như là bộ ký tự tối thiểu mà mọi người nghĩ rằng cần phải thoát. Thật không may, nó vẫn không an toàn nếu bạn không có toàn quyền kiểm soát nơi các giá trị thoát sẽ được sử dụng.

Xem xét mẫu sau, trong đó tác giả mẫu đã sử dụng các giá trị thuộc tính trích dẫn đơn

foo" onmouseover="alert[1]
6

foo" onmouseover="alert[1]
7 phổ biến của PHP và như bạn có thể đoán, nó vẫn thuộc về các giá trị thuộc tính vì hai lý do

Đầu tiên, như người dùng Hacker News DanBlake và nbpoole đã chỉ ra trong một cuộc thảo luận về bài đăng trên blog này, Internet Explorer coi

foo" onmouseover="alert[1]
8 là dấu phân cách thuộc tính. Nó có thể là một trường hợp cạnh, nhưng nó vẫn là một phương tiện tấn công tiềm năng, vì vậy cũng cần phải thoát khỏi
foo" onmouseover="alert[1]
8

Thứ hai, HTML cũng cho phép các giá trị thuộc tính hoàn toàn không được trích dẫn. Dù bạn có tin hay không thì tùy, các giá trị thuộc tính không được trích dẫn khá phổ biến [một số người quá lười biếng để trích dẫn chúng, những người khác là những người quá cuồng tín về hiệu suất, những người không thể chịu được ý nghĩ lãng phí những byte thừa đó].

Các giá trị thuộc tính không được trích dẫn là một trong các vectơ XSS lớn nhất có. Nếu bạn không trích dẫn các giá trị thuộc tính của mình, thì về cơ bản, bạn đang mở rộng cửa cho những kẻ hư hỏng đưa những thứ hư hỏng vào HTML của bạn. Rất ít triển khai bộ thoát bao gồm tất cả các trường hợp cạnh cần thiết để ngăn các giá trị thuộc tính không được trích dẫn trở thành vectơ XSS .

Escaping &, , ", ', `, , !, @, $, %, [, ], =, +, {, }, [, and ] is almost enough

Tất cả các ký tự trên đó [bao gồm cả ký tự khoảng trắng. ] có thể được sử dụng để thoát khỏi giá trị thuộc tính HTML không được trích dẫn. Nếu bạn thoát khỏi tất cả những người cuối cùng trong số họ, thì có lẽ bạn đã gần được an toàn. Nhưng bạn vẫn không an toàn đến mức bạn có thể bắt đầu ném xung quanh đầu vào của người dùng dù muốn hay không.

foo" onmouseover="alert[1] 0

…vào thứ gì đó có khả năng gây hại

foo" onmouseover="alert[1]
1

Tôi khuyên bạn nên chỉ định UTF -8 bộ ký tự trong cả

[username]
1 HTTP response header and a
[username]
2 tag, since it’s easy for one or the other to get switched off or omitted inadvertently as a codebase ages [this has happened to me].

đọc thêm

Như tôi đã đề cập trong tuyên bố từ chối trách nhiệm ở đầu bài đăng này, đây không phải là tài liệu tham khảo toàn diện về tất cả những vấn đề có thể xảy ra với HTML escaping. It’s not even a guide. It’s more of a tip-of-the-iceberg preview. Please don’t assume that, having read this post, you now know everything there is to know about HTML thoát. Tôi có thể đảm bảo rằng bạn không, bởi vì tôi không.

Tôi đã học được rất nhiều từ các nguồn sau đây và tôi thực sự khuyên bạn nên sử dụng chúng nếu bạn muốn tìm hiểu thêm

Có ký tự thoát trong HTML không?

Trong HTML, XHTML hoặc XML, bạn có thể sử dụng ký tự thoát để thể hiện bất kỳ ký tự Unicode nào chỉ bằng các chữ cái ASCII . Thoát ký tự được sử dụng trong đánh dấu bao gồm tham chiếu ký tự số [NCR] và tham chiếu ký tự được đặt tên. Tham chiếu ký tự số ở định dạng thập lục phân.

Mã để hiển thị nhỏ hơn lớn hơn trong trang web là gì?

Các thực thể ký tự HTML được sử dụng nhiều nhất

  trong HTML là gì?

Khoảng cách không ngắt ngăn không cho ngắt dòng xảy ra tại một điểm cụ thể trong tài liệu HTML. Để sử dụng một không gian không phá vỡ, bạn sẽ sử dụng như sau. Ví dụ: nếu bạn muốn dòng chữ "Mr. "

LT và GT trong HTML là gì?

Chỉ cần nhớ. lt == nhỏ hơn . > là viết tắt của > Chỉ cần nhớ. gt == lớn hơn .

Chủ Đề