2011-11-22 34 views
9

Chúng tôi đang thiết kế một bản ghi trực tuyến cho các trò chơi HTML5. Người dùng có thể tải lên tệp zip chứa trò chơi của họ.Rủi ro trong việc cho phép người dùng tải lên các tệp HTML/JS

On upload, zip được giải nén bởi máy chủ và mỗi tập tin được looped kiểm tra đó là mở rộng đối với một danh sách trắng cho phép:

  • .html
  • .js
  • .png
  • . jpg
  • .appcache
  • .m4a
  • .ogg

(Trò chơi phải được thực hiện trong trình chỉnh sửa trò chơi của chúng tôi để xuất các tệp đó). Điều này sẽ ngăn mọi người tải lên các tệp nén, tệp tập lệnh phía máy chủ, v.v.

Sau đó, trò chơi sẽ được chuyển sang miền không nấu tĩnh của chúng tôi (scirra.net). Khi trò chơi được chơi trên trang scirra.com của chúng tôi, trò chơi được hiển thị trong khung nội tuyến trỏ đến miền scirra.net. Điều này sẽ ngăn chặn JS độc hại truy cập cookie scirra.com.

Kỹ thuật iframe này và danh sách cho phép có đủ toàn diện để ngăn chặn bất kỳ điều gì độc hại được thực hiện không? Lưu ý rằng chúng tôi không thể thực sự kiểm tra từng tệp JS để chúng tôi giả sử mọi người sẽ thử tải lên JS độc hại.

+5

tôi biết điều này có thể gây ra một số lỗi, nhưng bạn cần quy trình phê duyệt giống như táo. –

+0

Tôi nghĩ nó cũng phụ thuộc vào loại bảo mật mà bạn quan tâm. Bạn chỉ quan tâm đến việc bảo vệ máy chủ của mình hay bạn cũng quan tâm đến việc chắc chắn rằng bạn không lưu trữ mã độc hại cho người chơi trò chơi của mình. Nếu bạn đang xem xét cả hai trường hợp, sau đó bạn có thể phải làm một công việc nhiều hơn để xác minh rằng người dùng không crafting (ngay cả trong trình soạn thảo của bạn) một số JavaScript crafty có thể khai thác các game thủ. – RLH

+0

@ Daniel, nó không thực sự thực tế đối với chúng tôi. Chúng tôi có lượng khán giả đông đảo những người muốn sử dụng điều này và muốn có một cách để sandbox mỗi trò chơi để nó an toàn. Tôi chỉ thực sự tự hỏi nếu một JS chạy trong một khung trên một tên miền khác nhau có thể làm bất kỳ thiệt hại. –

Trả lời

4

origin inheritance rules for iframes sẽ ngăn chặn khung nội tuyến scirra.net can thiệp vào scirra.com.

Tuy nhiên, không ngăn chặn tất cả các cuộc tấn công. Thực tế bạn đang giới thiệu một lỗ hổng XSS được lưu trữ. XSS có thể được sử dụng để giới thiệu các cuộc tấn công dựa trên trình duyệt, chẳng hạn như khai thác tràn bộ đệm trong các thành phần ActiveX. Khai thác falws trong Flash, Adobe reader hoặc Microsoft Office.

Bạn nên xem xét chạy phần mềm chống vi-rút trên nội dung scirra.net. Mặc dù điều này sẽ không ngăn chặn tất cả các cuộc tấn công. Trang ifram'ed có thể chuyển hướng hoặc giới thiệu iframe khác chứa nội dung độc hại.

Như Cheeksoft đã chỉ ra. Ứng dụng sẽ có thể ảnh hưởng lẫn nhau với XSS. Ứng dụng độc hại có thể truy cập vào ứng dụng khác offline storage hoặc nhận dữ liệu khác được nhúng trong một ứng dụng khác. Buộc mỗi ứng dụng có trên miền phụ sẽ giảm thiểu vấn đề này. Bạn có thể thiết lập bản ghi DNS để trỏ * .scirra.net đến máy chủ của bạn và quản lý tên miền trong ứng dụng web của bạn.

+1

Và nếu bạn lưu trữ tất cả các ứng dụng đã gửi trên cùng một miền, bạn có thể đã ngừng lưu trữ (và phản ánh) xss trên miền của riêng bạn, nhưng một ứng dụng độc hại có thể thực hiện các cuộc tấn công xss đối với tất cả các ứng dụng khác. Phục vụ từng từ tên miền được tạo động của riêng họ và cố gắng thuyết phục các nhà phát triển luôn đặt cookie của họ thành myapp.scirra.net và không bao giờ đặt scirra.net. – Cheekysoft

+0

@Cheekysoft yeah thats là một điểm tốt. Tôi đã không nghĩ về vector đó, có thể có thông tin giá trị được lưu trữ trong các ứng dụng khác hoặc trong các hệ thống lưu trữ ngoại tuyến js. – rook

1

Điều gì về việc kết hợp một số tính năng sàng lọc trong trình chỉnh sửa trò chơi mà bạn cung cấp? Hiển thị tham chiếu đến URL bên ngoài, thực hiện xác thực mã, kiểm tra mã hóa, v.v.

Bạn sẽ phải khóa tệp zip để tránh giả mạo, nhưng dù sao cũng có thể là một ý hay.

0

Đối với bất cứ ai khác đọc bài viết này, có một nghiệm/beta iFrame sandbox thuộc tính:

http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-sandbox

Lưu ý nó chỉ hiện hoạt động trên Chrome và Opera. Điều này cho phép bạn chỉ định một số tính năng hạn chế.Tuy nhiên trong trường hợp của câu hỏi của chúng tôi, chúng tôi đã loại bỏ ý tưởng và đã quyết định rằng vì chúng tôi đang ở vị trí thuận lợi khi có chương trình người sáng tạo trò chơi, chúng tôi có thể đơn giản giúp người dùng tải lên dữ liệu Json được đảm bảo an toàn với các tính năng cơ bản của máy chủ được chúng tôi lưu trữ.

Bất kỳ plugin nào chúng tôi có thể xem xét và phê duyệt theo cách thủ công để sử dụng, đó là công việc nhỏ hơn nhiều so với việc phê duyệt mọi trò chơi theo cách thủ công.

Các vấn đề liên quan