Риски, позволяющие пользователям загружать файлы HTML / JS - PullRequest
9 голосов
/ 22 ноября 2011

Мы разрабатываем онлайн-игру для HTML5-игр.Пользователи могут загрузить zip-файл, содержащий их игру.

При загрузке zip-файл распаковывается сервером, и каждый файл зацикливается, проверяя его расширение по белому списку, что позволяет:

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

(Игры должны быть сделаны в нашем редакторе игр, который экспортирует эти файлы).Это должно помешать людям загружать почтовые индексы, файлы сценариев на стороне сервера и т. Д. И т. Д.

Затем игры переносятся на наш статический домен без файлов cookie (scirra.net).Когда игра ведется на нашей странице scirra.com, игра отображается в фрейме, указывающем на домен scirra.net.Это должно помешать вредоносному JS получить доступ к файлам cookie scirra.com.

Является ли эта техника и белый список iframe достаточно всеобъемлющей, чтобы предотвратить совершение каких-либо вредоносных действий?Обратите внимание, что мы не можем проверять каждый файл JS, поэтому мы должны предположить, что люди попытаются загрузить вредоносный JS.

Ответы [ 3 ]

4 голосов
/ 22 ноября 2011

Правила происхождения наследования для фреймов не позволят фрейму scirra.net вмешиваться в scirra.com.

Это, однако, не предотвращает все атаки.По сути, вы вводите хранимую уязвимость XSS.XSS можно использовать для внедрения атак на основе браузера, таких как использование переполнения буфера в компонентах ActiveX.Использование ошибок во Flash, Adobe Reader или Microsoft Office.

Вы должны использовать антивирус на контенте scirra.net.Хотя это не предотвратит все атаки.Страница ifram может перенаправить или ввести другой iframe, содержащий вредоносный контент.

Как указал Чиксофт.Приложения смогут влиять друг на друга с помощью XSS.Вредоносное приложение может получить доступ к другому приложению автономное хранилище или получить другие данные, встроенные в другое приложение.Принуждение каждого приложения иметь свой поддомен уменьшит эту проблему.Вы можете настроить DNS-запись так, чтобы она указывала * .scirra.net на ваш сервер и позаботилась о доменном имени в вашем веб-приложении.

1 голос
/ 22 ноября 2011

Как насчет включения некоторых функций скрининга в предоставленный вами редактор игры? Отключить ссылки на внешние URL-адреса, выполнить проверку кода, проверить кодировку и т. Д.

Вам нужно будет заблокировать zip-файл, чтобы предотвратить подделку, но в любом случае это может быть хорошей идеей.

0 голосов
/ 22 ноября 2011

Для всех, кто читает это, есть экспериментальный / бета атрибут песочницы iFrame:

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

Обратите внимание, что в настоящее время он работает только в Chrome и Opera.Это позволяет вам указать некоторые ограничивающие функции.

Однако в случае нашего вопроса мы отказались от идеи и решили, что, поскольку мы находимся в выгодном положении, имея программу для создания игр, мы можем просто получитьПользователь может загружать данные Json, которые гарантированно безопасны с размещенными нами основными функциями движка.

Любые плагины, которые мы можем вручную просмотреть и одобрить для использования, это гораздо меньшая работа, чем ручное одобрение каждой игры.

...