XSS hoặc Cross-Site Scripting là một lỗ hổng ứng dụng web cho phép kẻ tấn công đưa nội dung JavaScript dễ bị tấn công vào một trang web. Kẻ tấn công khai thác điều này bằng cách đưa vào các trang web không có hoặc làm sạch kém nội dung do người dùng kiểm soát. Bằng cách tiêm nội dung dễ bị tổn thương, người dùng có thể thực hiện [nhưng không giới hạn],
- ăn cắp cookie
- Đánh lừa một trang web
- Bỏ qua Bảo vệ CSRF, v.v. ,
Có nhiều cách để một ứng dụng web có thể tự bảo vệ mình khỏi các sự cố Cross-Site Scripting. Một số trong số họ bao gồm,
- lọc danh sách đen
- Lọc danh sách trắng
- Mã hóa theo ngữ cảnh
- Xác thực đầu vào
- Chính sách bảo mật nội dung
1. lọc danh sách đen
It is easy to implement a filtering technique that protects the website from XSS issues only partially. It works based on a known list of finite XSS vectors. For example, most XSS vectors use event listener attributes such as onerror, onmouseover, onkeypress etc., Using this fact, users given HTML attributes can be parsed and these event listeners attributes. This will mitigate a finite set of XSS vectors such as
Thuận lợi.
- Các bộ lọc này rất dễ triển khai trong ứng dụng web
- Hầu như không có nguy cơ dương tính giả đối với nội dung người dùng an toàn được lọc bởi các bộ lọc này
Nhược điểm
Nhưng bộ lọc này có thể dễ dàng bỏ qua vì các vectơ XSS không hữu hạn và không thể duy trì như vậy. Dưới đây là danh sách một số bỏ qua hợp lệ của bộ lọc này. Bộ lọc này không bảo vệ trang web hoàn toàn
2. Lọc danh sách trắng
Lọc danh sách trắng ngược lại với lọc dựa trên danh sách đen. Thay vì liệt kê các thuộc tính không an toàn và làm sạch HTML của người dùng bằng danh sách này, lọc danh sách trắng sẽ liệt kê một tập hợp các thuộc tính và thẻ HTML đã đặt. Các thực thể được biết là chắc chắn an toàn được duy trì và mọi thứ khác sẽ được lọc ra
Điều này làm giảm khả năng XSS đến mức tối đa và chỉ mở XSS khi có lỗ hổng trong chính bộ lọc coi một số thực thể không an toàn là an toàn. Việc lọc này có thể được thực hiện ở cả phía Máy khách và phía máy chủ. Lọc danh sách trắng là bộ lọc được sử dụng phổ biến nhất trong các ứng dụng web hiện đại
Thuận lợi.
- Giảm khả năng XSS đến một mức độ rất tốt
- Một số bộ lọc danh sách trắng như bộ lọc Antisamy viết lại nội dung Người dùng bằng các quy tắc An toàn. Những nguyên nhân này gây ra việc viết lại nội dung HTML với các tiêu chuẩn nghiêm ngặt của ngôn ngữ HTML
Nhược điểm.
Thường xuyên hơn, điều này hoạt động bằng cách chấp nhận HTML không an toàn hoặc không được làm sạch, phân tích chúng và xây dựng một HTML an toàn và phản hồi lại cho người dùng. Đây là hiệu suất chuyên sâu. Việc sử dụng nhiều các bộ lọc này có thể có tác động tiềm ẩn về hiệu suất đối với ứng dụng web hiện đại của bạn
3. Mã hóa theo ngữ cảnh
The other common mitigation technique is to consider all user given data as textual data and not HTML content, even if it is an HTML content. This can be done performing HTML entity encoding on user data. Encoding
test
may get converted totestThe browser will then parse this correctly and render
test
as text instead of rendering it as h1 HTML tag.Thuận lợi
Nếu được thực hiện đúng, mã hóa theo ngữ cảnh sẽ loại bỏ hoàn toàn rủi ro XSS
Nhược điểm.
Nó coi tất cả dữ liệu người dùng là không an toàn. Do đó, bất kể dữ liệu người dùng an toàn hay không an toàn, tất cả nội dung HTML sẽ được mã hóa và sẽ được hiển thị dưới dạng văn bản thuần túy
4. Xác thực đầu vào
Trong kỹ thuật xác thực Đầu vào, một biểu thức chính quy được áp dụng cho mọi dữ liệu tham số yêu cầu i. e. , nội dung do người dùng tạo. Chỉ khi nội dung đi qua một biểu thức chính quy an toàn thì nó mới được phép. Nếu không, yêu cầu sẽ không thành công ở phía máy chủ với 400 mã phản hồi
Thuận lợi
Xác thực đầu vào không chỉ làm giảm XSS mà còn bảo vệ hầu hết tất cả các lỗ hổng có thể phát sinh do tin tưởng vào nội dung của người dùng
Nhược điểm
- Có thể giảm thiểu XSS trong trường số điện thoại bằng cách xác thực biểu thức chính quy dạng số nhưng đối với trường tên, điều đó có thể không thực hiện được vì tên có thể ở nhiều ngôn ngữ và có thể có các ký tự không phải ASCII trong bảng chữ cái Hy Lạp hoặc Latinh
- Kiểm tra biểu thức chính quy là chuyên sâu về hiệu suất. Tất cả các tham số trong tất cả các yêu cầu tới máy chủ phải khớp với một biểu thức chính quy
5. Chính sách bảo mật nội dung
Trình duyệt hiện đại cho phép sử dụng CSP hoặc Tiêu đề chính sách bảo mật nội dung. Với các tiêu đề này, người ta có thể chỉ định danh sách các miền chỉ có thể tải nội dung JavaScript từ đó. Nếu người dùng cố gắng thêm một JavaScript dễ bị tấn công, các tiêu đề CSP sẽ chặn yêu cầu
Thuận lợi
CSP là dạng tiên tiến nhất của cơ chế bảo vệ XSS. Nó loại bỏ các nguồn không đáng tin cậy để nhập dữ liệu vào các trang web dưới mọi hình thức
Nhược điểm.
Để xác định các tiêu đề CSP, các trang web không được sử dụng mã JavaScript nội tuyến. JS nên được đưa ra bên ngoài và được tham chiếu trong các thẻ tập lệnh. Tập hợp các miền tải nội dung tĩnh này phải được đưa vào danh sách trắng trong các tiêu đề CSP
Mã hóa Vs Lọc –
Một câu hỏi phổ biến về giảm thiểu XSS là quyết định mã hóa hay lọc [khử trùng] dữ liệu người dùng. Khi nội dung do người dùng điều khiển phải được hiển thị dưới dạng HTML nhưng nếu javascript không thực thi thì nội dung đó phải chuyển qua bộ lọc. Nếu dữ liệu người dùng không cần phải được hiển thị dưới dạng HTML và nếu hiển thị văn bản là đủ, thì nên mã hóa HTML các ký tự trong dữ liệu người dùng
Kỹ thuật giảm thiểu được đề xuất cho XSS –
Bộ lọc danh sách đen đã bị khai thác nhiều lần và do nội dung HTML liên tục phát triển nên việc sử dụng bộ lọc Danh sách đen luôn không an toàn. Mặc dù xác thực đầu vào phù hợp và các tiêu đề CSP có thể giảm thiểu XSS ở mức độ tốt, nhưng chúng tôi luôn khuyến nghị mã hóa hoặc lọc thực thể dựa trên chính sách danh sách trắng dựa trên trường hợp sử dụng. Xác thực đầu vào và tiêu đề CSP có thể được thêm vào như một lớp bảo vệ bổ sung.