Tôi đã xem qua một số post on Meta SO và tôi tò mò về những khác biệt tinh tế giữa HTML và mã hóa Thuộc tính là gì.HTML và mã hóa thuộc tính
Trả lời
Mã hóa HTML thay thế các ký tự nhất định có ý nghĩa ngữ nghĩa trong đánh dấu HTML, với các ký tự tương đương có thể được hiển thị cho người dùng mà không ảnh hưởng đến việc phân tích đánh dấu.
Các nhân vật quan trọng và rõ ràng nhất là <,>, &, và "được được thay thế bằng <
, >
, &
và "
, tương ứng. Thêm vào đó, một bộ mã hóa có thể thay thế nhân vật bậc cao với các thực thể HTML tương đương mã hóa, do đó nội dung có thể được giữ nguyên và được hiển thị chính xác ngay cả trong trường hợp trang được gửi tới trình duyệt dưới dạng ASCII. chuỗi ký tự từ phá vỡ thuộc tính của phần tử HTML. Cụ thể, bạn thường chỉ thay thế ", & và < với "
, &
và <
. Điều này là do bản chất của các thuộc tính, dữ liệu mà chúng chứa và cách chúng được phân tích cú pháp và giải thích bởi trình duyệt hoặc trình phân tích cú pháp HTML khác với cách một tài liệu HTML và các phần tử của nó được đọc.
Xét về làm thế nào mà liên quan đến XSS, bạn muốn để khử trùng đúng chuỗi từ một nguồn bên ngoài (ví dụ như người dùng) để họ không phá vỡ trang của bạn, hoặc quan trọng hơn, tiêm markup và kịch bản có thể thay đổi hoặc phá hủy ứng dụng của bạn hoặc ảnh hưởng đến máy của người dùng của bạn (bằng cách tận dụng các lỗ hổng của trình duyệt hoặc nền tảng).
Nếu bạn muốn hiển thị nội dung do người dùng tạo trong trang, bạn sẽ mã hóa chuỗi và sau đó hiển thị nó trong đánh dấu của bạn và mọi thứ họ nhập sẽ được hiển thị theo nghĩa đen mà không lo lắng XSS hoặc đánh dấu bị hỏng.
Nếu bạn cần đính kèm nội dung do người dùng tạo vào thành phần trong thuộc tính (ví dụ: tooltip
trên liên kết), bạn phải mã hóa để đảm bảo nội dung không phá vỡ đánh dấu của phần tử.
Bạn có thể sử dụng cùng chức năng cho mã hóa HTML để xử lý mã hóa thuộc tính không? Về mặt kỹ thuật, vâng. Trong trường hợp của câu hỏi meta bạn đã liên kết, có vẻ như họ đang sử dụng HTML đã được mã hóa và giải mã nó, sau đó sử dụng kết quả đó làm giá trị thuộc tính, dẫn đến đánh dấu được mã hóa hiển thị theo nghĩa đen.
Vì HTML5 hỗ trợ các thuộc tính trích dẫn kép, trích dẫn đơn lẻ và thuộc tính quoteless, lời khuyên của bạn về các ký tự thoát trong các thuộc tính là KHÔNG đủ trong trường hợp chung. Chỉ giả sử bạn luôn sử dụng các thuộc tính được trích dẫn kép và không bao giờ dính dữ liệu vào trình xử lý sự kiện javascript như onclick. – Erlend
Xem mã để mã hóa thuộc tính tại đây: https://github.com/chrisisbeef/jquery-encoder/blob/master/src/main/javascript/org/owasp/esapi/jquery/encoder.js – Erlend
Chỉ cần chỉnh sửa nhỏ. Từ đoạn thứ hai: "Cụ thể, bạn thường chỉ thay thế", &, và
Tôi khuyên bạn nên xem qua OWASP XSS Prevention Rules 1 and 2.
Một bản tóm tắt ngắn gọn ...
Quy tắc 1 cho HTML
thoát các ký tự sau với mã hóa thực thể HTML ...
&
->&
<
-><
>
->>
"
->"
'
->'
/
->/
Rule 2 cho HTML Common Thuộc tính
Trừ cho các ký tự chữ và số, thoát khỏi tất cả các ký tự với các giá trị ASCII ít hơn 256 với & #xHH; định dạng (hoặc thực thể được đặt tên nếu có) để ngăn việc chuyển đổi khỏi thuộc tính. Lý do quy tắc này là quá rộng là các nhà phát triển thường xuyên để lại các thuộc tính unquoted. Các thuộc tính được trích dẫn đúng chỉ có thể được thoát bằng dấu ngoặc kép tương ứng. Các thuộc tính không được trích dẫn có thể được chia nhỏ với nhiều ký tự, bao gồm [dấu cách]% * +, - /; < =>^và |.
- 1. cách mã hóa thuộc tính href trong HTML
- 2. Thuộc tính HTML tùy chỉnh và jQuery
- 3. ModelState.AddModelError mã hóa HTML
- 4. Regex - Thuộc tính đối sánh trong mã HTML
- 5. Thuộc tính Java Mã hóa UTF-8 trong Eclipse
- 6. Chuỗi Java mã hóa UTF-8 vào Thuộc tính
- 7. python "'NoneType' đối tượng không có thuộc tính 'mã hóa'"
- 8. Tính năng ẩn/Thuộc tính/Thuộc tính/Thẻ của CSS3 và HTML
- 9. Xóa và thêm thuộc tính bị vô hiệu hóa với jQuery từ hộp kiểm html
- 10. MvcHtmlString.ToHtmlString() không mã hóa HTML?
- 11. JsonResult với mã hóa Html
- 12. Ý nghĩa thuộc tính thuộc tính trong html
- 13. EditorFor() và html tính
- 14. Giải mã mã hóa HTML C# MVC4
- 15. Mã hóa Html trong PHP
- 16. Mã hóa HTML trước POST
- 17. Chuỗi mã hóa Json HTML
- 18. Sự khác biệt giữa Mã hóa Url và mã hóa HTML
- 19. Asp.net hộp kiểm và thuộc tính dữ liệu html
- 20. Mã hóa chuỗi Android và thực thể html chuyển đổi
- 21. Cách đặt thuộc tính mã hóa charset cho SVN File và Eclipse
- 22. Cách nhận xét thuộc tính thẻ HTML trong mã nguồn HTML?
- 23. Thuộc tính CSS cho cả "html" và "body"
- 24. Dấu cách giữa các thuộc tính html và giá trị?
- 25. Truy cập HTML thuộc tính trong Nokogiri
- 26. Chuyển đối tượng sang thuộc tính HTML
- 27. Cách thêm thuộc tính HTML với jQuery
- 28. mã hóa Html trong MVC đầu vào
- 29. Nhiều thuộc tính lớp học trong HTML
- 30. Mã hóa HTML trong T-SQL?
Sự khác nhau giữa những gì? Câu hỏi của bạn dường như thiếu một vài từ. – Dai
Có thể OP so sánh và & cam; nhưng tôi không thể thấy sự giống nhau. –