2016-10-25 6 views
2

В моем угловом приложении я хочу, чтобы пользователи определяли расширенные выражения фильтра для фильтрации отображаемых объектов. Я смотрел на разные библиотеки, и кажется, что filtrex делает то, что я хочу, но количество выражений, которые оно позволяет, может быть недостаточно для моей цели.Можно ли разрешить пользователям определять угловые выражения?

Я думал просто использовать угловые выражения. Я бы создал новый угловой модуль (чтобы убедиться, что никакие фильтры или переменные rootScope, определенные в моем приложении, не могут стать проблемой) и просто запустите в нем $parse.

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

Таким образом, мой вопрос: Являются ли угловые выражения безопасными для определения пользователями? Или они позволяют каким-либо образом делать что-то вредное, например, модифицировать dom, перенаправлять на другую страницу, делать HTTP-запросы или что-то еще, о чем я не могу сейчас думать?

+2

Цитирование [Угловая страница безопасности] (https://docs.angularjs.org/guide/security): ** «Если у злоумышленника есть доступ к управлению Угловые шаблоны или выражения, они могут использовать угловое приложение через XSS атаки, независимо от версии **. Другими словами: неплохой план. –

+2

Я не могу сказать ничего конкретного относительно Углового, потому что я незнаком с ним, но если вы позволяете своим пользователям сохранять код, которому подвергаются другие пользователи, он по своей сути небезопасен. Предположите, что ваши пользователи враждебны, злонамеренны и знают, как выявлять и использовать недостатки в системе, которую вы представляете. Тем не менее, не могли бы вы реализовать это как API какого-то типа, таким образом вы можете проверить и проверить серверную сторону. –

+0

@JoeClay: Интересно. Но я все еще задаюсь вопросом, говорят ли они только о том, где область, в которой оцениваются выражения, используется в шаблоне, и в этом случае мне очевидно, как эти выражения могут использоваться плохо. В моем случае выражения будут выполняться в изолированном угловом модуле, и мне интересно, можно ли в этом случае использовать выражения. – cdauth

ответ

1

Согласно Angular security guide, пользовательские выражения никогда не должны выполняться.

Until Angular 1.5, выражения выполнялись в песочнице, чтобы предотвратить слабые стили программирования (не для предотвращения дыр в безопасности). В каждой версии Angular обнаружены способы выхода из песочницы. Многие примеры можно найти в Интернете по адресу angular sandbox escape, а краткий обзор по этой проблеме можно найти here.

В Angular 1.6, песочница has been removed, поэтому запуск произвольного JavaScript из выражений должен быть еще проще.

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

Смежные вопросы