2011-08-22 7 views
5

Tôi đang làm việc trên trang web mà khách hàng sẽ sử dụng bằng cách nhúng trang web vào iframe trong trang web của họ. Tôi muốn cung cấp cho họ khả năng tùy chỉnh kiểu dáng của nội dung để họ có thể làm cho nó phù hợp với phong cách trang web của họ.Có bao gồm tệp CSS bên ngoài an toàn không hoặc có thể dẫn đến việc tiêm mã không?

Ý tưởng cơ bản mà tôi có là cho phép họ cung cấp cho tôi URL tới tệp CSS tôi nên đưa vào trang mà tôi phân phát cho họ để lấp đầy khung nội tuyến. Theo như tôi biết điều này là an toàn, nhưng tôi không đặc biệt quen thuộc với CSS (đặc biệt là các phiên bản mới hơn), vì vậy tôi muốn xác minh điều này.

Có cách nào để ai đó có thể xây dựng tệp CSS cho phép họ chèn mã vào trang web của tôi hoặc truy cập vào những thứ như cookie của tên miền của tôi không? Điều này thực sự an toàn hay tôi cần phải đưa ra một giải pháp khác?

+1

Tôi nghĩ bạn nên cho phép người dùng dán kiểu tùy chỉnh vào vùng văn bản và sau đó bạn có thể xác thực rằng đó thực sự là CSS và không có hại trước khi đưa nó vào chế độ xem của bạn. –

Trả lời

12

Không có gì là không an toàn. expression-moz-binding là các cách được biết để gây ra việc thực thi tập lệnh tùy ý trên một số trình duyệt nhất định thông qua CSS. LiveJournal bị tấn công XSS rất công khai do JavaScript được nhúng trong CSS do người dùng cung cấp.

Với Mozilla quyết định cho phép thực thi JavaScript tùy ý qua CSS, không có giải pháp khả thi nào khác so với giải pháp chúng tôi đã thực hiện.

Từ Caja's attack vector wiki:

Crafted stylesheets CSS có thể thực thi javascript unsanitized trong phạm vi toàn cầu trên một số trình duyệt.

nền

CSS bao gồm một số cơ chế cho việc thay đổi đánh dấu xung quanh và thực hiện các biểu thức.

IE có phần mở rộng cho phép thực thi javascript tùy ý. Thuộc tính expression được mô tả tại http://msdn2.microsoft.com/en-us/library/ms537634.aspx

Sử dụng sức mạnh của thuộc tính động, giờ đây có thể khai báo giá trị thuộc tính không chỉ là hằng số, mà còn là công thức. ... Đối với tập lệnh, một thuộc tính động có thể là bất kỳ câu lệnh JScript hoặc Microsoft Visual Basic Scripting Edition (VBScript) hợp pháp nào. http://msdn2.microsoft.com/en-us/library/ms533503.aspx

binding phép ràng buộc để kịch bản bên ngoài quy định http://developer.mozilla.org/en/docs/CSS:-moz-binding & http://developer.mozilla.org/en/docs/XBL:XBL_1.0_Reference:Elements#binding

-moz-binding phép ràng buộc thông qua giao diện XML (cũng sử dụng dữ liệu: URL)

Giả

đang Untrusted có thể tạo ra các phần tử kiểu hoặc thuộc tính kiểu hoặc cách thêm công thức phân xử y CSS quy tắc và tạo các phần tử DOM kích hoạt các quy tắc đó.

phiên bản

IE 5 và sau đó (nhưng không phải IE 8 hoặc mới hơn trong "chế độ tiêu chuẩn").

Mozilla/Firefox, các phiên bản không xác định.

+0

Tuyệt vời, cảm ơn tất cả nền. Có vẻ như tôi sẽ phải có một cơ chế khác để họ tạo kiểu tóc, một nơi tôi có thể khử trùng nó trước. Bây giờ, hãy tìm hiểu cách làm vệ sinh CSS ... – Herms

+0

Dự án Caja giữ [danh sách trắng] (http://code.google.com/p/google-caja/wiki/CajaWhitelists) thuộc tính và giá trị CSS có thể có ích. Nó cũng có một trình phân tích cú pháp và trình dọn dẹp Java được tích hợp sẵn. –

+0

Caja đã chuyển sang Github, các danh sách trắng có thể được tìm thấy tại đây: https://github.com/google/caja/tree/master/src/com/google/caja/ lang/css –