поле ввода для размещения javascript / json и проблемы безопасности - PullRequest
4 голосов
/ 15 апреля 2010

Я хочу предоставить посетителям моих веб-страниц доступ к текстовой области, где они могут написать небольшой кусочек JavaScript для настройки определенных функций.

Представьте, что javascript выглядит примерно так:

{
макс: 100;
allowFeedback ложь;
filterEnabled: true;
}

Я хотел бы проверить, что они пишут, и тогда мой javascript сделает что-то в зависимости от вашего выбора:

так что это будет:

var userCode = document.getElementById ("textarea"). Value;
var result = eval (userCode);
.. if (result.filterEnabled) {...}
if (result.allowFeedback) {...} ...

Вопрос: пользователь действительно мог набрать там любой javascript? что-то злое, что-то не так Что я могу сделать, чтобы проверить его код перед выполнением?

Большое спасибо

Ответы [ 5 ]

1 голос
/ 23 сентября 2010

Прочтите эту статью о JSON и безопасности. Там также присутствуют код и пример - Разбор JSON с использованием JSON Parser или eval ()! . Это должно быть полезно для вас.

0 голосов
/ 12 февраля 2013

У меня был подобный вид использования давно. Это может показаться детским ответом, но перед оценкой вы можете разобрать символы, такие как <> и. специально. ТАК, что контент больше не будет действительной программой. В основном сценарии содержат точки и <>, которые можно отфильтровать для оценки. или заменены некоторыми другими персонажами.

0 голосов
/ 15 апреля 2010

Прочитайте это на CSRF ... не очень хорошая идея, чтобы оценить любой пользовательский ввод, поверьте мне.

0 голосов
/ 15 апреля 2010

Код, который вы разместили, уязвим для XOM на основе DOM , и все правила для использования XSS по-прежнему применяются. Не часто уязвимости можно найти в JavaScript, но это хороший пример. Я бы не использовал этот код. Если вы действительно хотите эту функцию, вы должны поместить ее в свой собственный домен, который не имеет сеансов / аутентификации / чего-либо ценного.

0 голосов
/ 15 апреля 2010

Если вы eval пишете, они действительно могут написать и запустить любой javascript, который вы могли бы написать в месте вызова eval. Я бы предложил разрешить только очень ограниченный синтаксис (например, variable=value, с ограниченным набором разрешенных переменных и значений), а затем проанализировать его.

Редактировать: если доступно, вы также можете использовать JSON-анализатор для JavaScript вместо eval, например. JSON.parse.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...