Trong vài ngày qua, chúng tôi đã xem xét cách hoạt động của các cuộc tấn công tập lệnh chéo trang và cách đưa văn bản thuần túy hoặc chuỗi HTML được mã hóa vào có thể giúp bạn an toàn hơn. Chúng tôi cũng đã xem xét một số nhược điểm của cả hai kỹ thuật đó
Hôm nay, chúng ta sẽ xem xét một cách tiếp cận cuối cùng. vệ sinh. Nào cùng đào vào bên trong
Vệ sinh là gì?
Sanitizing là quá trình xóa bất kỳ thuộc tính, thuộc tính và giá trị nào không có trong danh sách cho phép hoặc bị cấm rõ ràng trong danh sách không cho phép
Ví dụ: nếu HTML được hiển thị từ chuỗi HTML của chúng tôi trông như thế này…
View My Profile
Khi được thêm vào giao diện người dùng, một số mục có thể bị hỏng nhưng nội dung độc hại sẽ không được hiển thị
Cách vệ sinh chuỗi HTML bằng vanilla JS
Phương thức
View My Profile
5 để tạo các phần tử HTML từ chuỗi HTML của bạn, sau đó lặp qua từng phần tử và xóa mọi thuộc tính, thuộc tính và giá trị không có trong danh sách cho phép hoặc bị cấm rõ ràng trong danh sách không cho phépBạn có thể chuyển toàn bộ chuỗi HTML của mình vào một thư viện khử trùng và nó sẽ trả về một chuỗi đã khử trùng mà bạn có thể sử dụng với thuộc tính chuỗi HTML hoặc các phần tử đã khử trùng mà bạn có thể đưa vào DOM bằng một phương thức như
View My Profile
8. Chúng tôi sẽ chấp nhận chuỗi để khử trùng làm đối sốChúng tôi có thể trả về một chuỗi đã được khử trùng HOẶC chính các nút đã được khử trùng. Hãy cung cấp cho người dùng khả năng quyết định cái họ muốn bằng đối số thứ hai,
View My Profile
0Nhưng tin tặc sử dụng tất cả các loại thủ thuật viết hoa và khoảng trắng để tránh những thứ như vậy, vì vậy chúng tôi cần chuẩn hóa chuỗi của mình
Chúng ta có thể sử dụng phương thức
// Convert the string to HTML
let html = stringToHTML[];
// Sanitize it
removeScripts[html];
9 để xóa tất cả khoảng trắng khỏi chuỗi của mình và phương thức /**
* Remove dangerous stuff from the HTML document's nodes
* @param {Node} html The HTML document
*/
function clean [html] {
let nodes = html.children;
for [let node of nodes] {
removeAttributes[node];
clean[node];
}
}
0 để chuyển đổi nó thành chữ thường. Chúng ta sẽ gán chuỗi đã chuẩn hóa cho biến /**
* Remove dangerous stuff from the HTML document's nodes
* @param {Node} html The HTML document
*/
function clean [html] {
let nodes = html.children;
for [let node of nodes] {
removeAttributes[node];
clean[node];
}
}
1 và sử dụng chuỗi đó thay thế
View My Profile
2Chúng ta có thể đưa nó vào DOM như thế này
View My Profile
4Đây là một bản demo. Bạn cũng có thể tải xuống tập lệnh đã hoàn thành trên Bộ công cụ Vanilla JS
Nếu bạn muốn thứ gì đó mạnh mẽ hơn, thì DOMPurify là thư viện đầu ngành sử dụng danh sách cho phép và có khả năng cấu hình cao