7 điểm bởi xguru 2024-07-05 | 2 bình luận | Chia sẻ qua WhatsApp
  • HTMX là một framework JavaScript, cho phép thay thế các phần tử DOM bằng dữ liệu động thông qua các yêu cầu AJAX
  • Vì HTMX thêm hành vi động vào trang bằng các thẻ HTML thông thường có thuộc tính tùy chỉnh, nên rất khó cung cấp thêm lớp bảo mật chống lại các cuộc tấn công cross-site scripting (XSS)
  • Thông thường, có thể dùng Content Security Policy (CSP) để hạn chế JavaScript được phép thực thi
  • Rất khó cấu hình CSP sao cho HTMX vẫn tiếp tục hoạt động đồng thời vẫn bảo vệ được trước cross-site scripting

Tải fragment độc hại

  • Một trong các cách tiêm HTMX là thực hiện yêu cầu đến một máy chủ độc hại
  • HTMX lấy các fragment HTML có thể chứa JavaScript và chèn chúng vào trang
  • Điều này có thể bị lợi dụng để kích hoạt yêu cầu đến các domain ngoài domain của ứng dụng web và tải script độc hại

eval không an toàn

  • HTMX tạo và thực thi mã một cách động
  • Các tính năng HTMX sau thực hiện điều này: bộ lọc trigger, thuộc tính hx-on, hx-vals hoặc hx-headers có tiền tố js:/javascript:
  • Để các tính năng này hoạt động, ứng dụng phải dùng tùy chọn CSP unsafe-eval để cho phép đánh giá mã động
  • Tuy nhiên, khi cho phép unsafe-eval, có thể dùng các tính năng của HTMX để tiêm JavaScript ngay lập tức

Vô hiệu hóa HTMX bằng hx-disable

  • Có thể dùng thuộc tính hx-disable để tắt các tính năng HTMX trong một phần của trang
  • Tài liệu cho rằng cách này có thể cung cấp thêm bảo mật
  • Nhưng điều này rất dễ bị vượt qua: chỉ cần đóng thẻ div bằng `

rồi chèn payload ra bên ngoài phần tử có thuộc tínhhx-disable`

Nonce cho inline script

  • Sử dụng nonce trong CSP là cách an toàn nhất để ngăn chặn tiêm script
  • Ứng dụng tạo một nonce ngẫu nhiên và thêm nó vào mọi script thuộc về ứng dụng
  • Các script do kẻ tấn công tiêm vào sẽ không có nonce đúng nên sẽ không được thực thi
  • HTMX có một tính năng tự động thêm nonce đúng vào các inline script mà nó tìm thấy
  • Điều này tiện lợi, nhưng lại phá vỡ hoàn toàn mô hình bảo mật của CSP dùng nonce
  • Bằng cách thêm nonce đúng vào mọi script được phát hiện, HTMX làm suy giảm hoàn toàn lớp bảo mật mà nonce mang lại
  • Việc tự động thêm nonce được thực hiện thông qua tham số htmx.config.inlineScriptNonce

Thẻ meta cấu hình

  • HTMX có nhiều tùy chọn cấu hình có thể thiết lập bằng thẻ ``
  • Trong một cuộc tấn công XSS, có thể tiêm thẻ `` phù hợp để thay đổi cấu hình của HTMX
  • Ví dụ, ở trên đã đề cập rằng thuộc tính hx-disable sẽ vô hiệu hóa việc xử lý của HTMX
  • Tuy nhiên, có thể đổi tên thuộc tính đó trong cấu hình
  • Nếu đổi từ hx-disable sang tên khác, có thể vô hiệu hóa chức năng hx-disable

Kết luận

  • Việc dùng HTMX trên một website làm tăng đáng kể bề mặt tấn công của việc tiêm HTML
  • Có thể dùng Content Security Policy để hạn chế rủi ro XSS, nhưng không thể vừa dùng đầy đủ mọi tính năng của HTMX vừa đảm bảo an toàn trước các hình thức tiêm mã

2 bình luận

 
galadbran 2024-07-06

Cũng đáng lẽ phải có những ý kiến phản biện cho bài viết này hoặc bàn về cách sử dụng an toàn chứ nhỉ...