Я планирую создать на своем сайте аспект, в котором пользователи смогут отправлять HTML, CSS и JS, которые затем «вживую» генерируются в полные рабочие страницы HTML. Другие пользователи смогут это увидеть. На этих страницах должен быть рабочий Javascript.

Я понимаю, что это довольно серьезный недостаток безопасности, но очень важно, чтобы эта функция была на сайте. У меня были такие идеи:

  • Никакие внешние файлы Javascript нельзя связать с
  • jQuery и т. д. могут быть включены, но только из надежного CDN (например, Google)
  • Некоторые функции Javascript будут отключены и удалены (например, eval())
  • Пользователи не могут отправлять демонстрационный код, пока не заработают определенное количество «репутации».
  • Отправленный пользователем демонстрационный код должен быть авторизован администратором, прежде чем он будет запущен.
  • Использовать минимизированный код нельзя.

И пассивные меры безопасности:

  • Заявление об отказе от ответственности, поэтому мы не несем ответственности! ;)
  • Кнопки "Сообщить" на случай, если пользователь обнаружит что-то непонятное

Итак, вот вопрос: Что вы думаете об этом как о плане безопасности? Будет ли этих мер в совокупности достаточно, чтобы остановить злоумышленников? Пользователи будут отправлять свой код в трех отдельных входах - CSS, HTML и JS - поэтому я смогу соответствующим образом фильтровать и дезинфицировать, а затем реструктурировать его «вживую», чтобы другие могли предварительно просмотреть.

Благодарность!

Джек

3
Jack 5 Авг 2010 в 13:07

2 ответа

Лучший ответ

Звучит как план, хотя я предполагаю, что его реализация будет сложной.

  • JavaScript - настолько гибкий язык, что, вероятно, будет невозможно автоматически отфильтровать все eval()-подобные конструкции.

  • Есть также много способов получить файлы сценариев из внешних доменов, которые будет сложно определить.

  • Могут быть большие объемы кода, требующие ручного редактирования.

Сосредоточение внимания на репутационном аспекте идеи (прием исполняемого кода только от доверенных пользователей) и запуск всего в "песочнице" без файлов cookie отдельно от домена, в который вы входите, несомненно, является хорошей идеей.

Всегда будет оставаться риск, но я не понимаю, насколько этот риск больше, чем на любом другом веб-сайте в Интернете, который предоставляет JavaScript.

3
Pekka 5 Авг 2010 в 09:18

Проект, который поддерживает поставляемый пользователем JavaScript во многих социальных сетях, - это Google Caja. Это позволяет любому запускать javascript в вашем домене в безопасной песочнице. Если честно, проблем больше, чем перечисленных вами, и caja позаботится об этом за вас. Если вы хотите предоставить пользователям HTML, но не javascript, вам следует использовать HTML Purifier. Но это следует использовать только в крайнем случае, в большинстве случаев вам следует использовать кодировку сущности html.

3
rook 5 Авг 2010 в 15:01