Можно ли санировать код Javascript? - PullRequest
7 голосов
/ 26 августа 2010

Я хочу разрешить пользователю добавлять Javascript в разделы моего сайта.

  1. Это безумие?
  2. Существуют ли какие-либо сценарии Javascript sanitizer или хорошие шаблоны регулярных выражений для сканирования на наличие предупреждений, iframes, удаленных сценариев и других вредоносных Javascript?
  3. Должен ли этот процесс быть авторизован вручную (проверяющий Javascript человеком)?
  4. Было бы разумнее разрешить пользователям использовать только фреймворк (например, jQuery), а не предоставлять им доступ к реальному Javascript?Таким образом, это может быть проще контролировать.

Спасибо

Ответы [ 8 ]

6 голосов
/ 26 августа 2010

Я думаю, что правильный ответ - 1.

Как только вы разрешите Javascript, вы откроете себя и своих пользователей для всех видов проблем.Не существует идеального способа очистить Javascript, и такие люди, как Армия Троллей, примут это как свою личную миссию, чтобы запутать вас.

4 голосов
/ 26 августа 2010

1. Это совершенно безумно?

Не думаю, но рядом. Посмотрим.

2. Существуют ли какие-либо сценарии Javascript sanitizer или хорошие шаблоны регулярных выражений для сканирования предупреждений, iframes, удаленных сценариев и других вредоносных Javascript?

Да, по крайней мере, есть Google Caja и ADSafe для санации кода, что позволяет ему быть песочницей . Я не знаю, до какой степени доверия они обеспечивают.

3. Должен ли этот процесс быть авторизован вручную (проверяющий Javascript человеком)?

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

4. Было бы разумнее позволить пользователям использовать только фреймворк (например, jQuery), а не предоставлять им доступ к реальному Javascript? Таким образом, было бы легче контролировать.

JQuery - это просто обычный Javascript, поэтому, если вы пытаетесь защитить от атак, это совсем не поможет.

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

3 голосов
/ 26 августа 2010

Взгляните на Google Caja :

Caja позволяет веб-сайтам безопасно встраивать веб-приложения DHTML от третьих лиц и обеспечивает богатое взаимодействие между страницей внедрения и встроенными приложениями,В нем используется модель безопасности объектных возможностей, позволяющая использовать широкий спектр гибких политик безопасности, чтобы содержащаяся страница могла эффективно контролировать использование пользовательских данных встроенными приложениями и позволяла гаджетам предотвращать помехи между элементами пользовательского интерфейса гаджетов.

1 голос
/ 26 августа 2010

Может быть безопаснее спроектировать / реализовать свой собственный язык сценариев с ограничениями, который может быть очень похож на JavaScript, но находится под контролем вашего собственного интерпретатора.

1 голос
/ 26 августа 2010

Подумайте обо всем, что ВЫ можете сделать с помощью JavaScript. Затем подумайте, что бы вы сделали, если бы могли сделать это на чужом сайте. Это то, что люди будут делать только потому, что могут, или выяснить, смогут ли они. Я не думаю, что это хорошая идея.

1 голос
/ 26 августа 2010

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

0 голосов
/ 12 декабря 2010

Разместите его в другом домене.Политика безопасности того же происхождения в браузерах будет препятствовать тому, чтобы пользователь JS атаковал ваш сайт.

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

0 голосов
/ 26 августа 2010
  1. Возможно.Возможности для совершения плохих вещей будут намного больше, чем когда вы просто разрешаете HTML, но стараетесь избегать использования JavaScript.
  2. Я не знаю.
  3. Ну, две вещи:Вы действительно хотите тратить свое время на это, и если вы делаете это, вам лучше убедиться, что они видят JavaScript код , а не реальный живой JavaScript!будет иметь какое-то значение, если только у вас нет кого-то, одобряющего сообщения, и этот человек больше чувствует себя как дома с jQuery, чем обычный JavaScript.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...