Проблемы с использованием eval () для выполнения предоставленного пользователем кода? - PullRequest
1 голос
/ 12 ноября 2011

У меня есть виджет калькулятора ( jsfiddle ), который использует функцию javascript eval() для оценки ввода пользователя для работы в качестве калькулятора. Это встроенный виджет в расширении chrome, поэтому к нему не прикреплена база данных или что-либо еще, что может быть повреждено, и он не отправляет и не получает никаких данных.

Очевидно, что поскольку он использует функцию javascript eval, любой блок javascript может быть выполнен этим блоком. Есть ли риск, связанный с этим? Я довольно новичок в javascript, поэтому я не уверен, что может произойти в результате того, что пользователь сможет оценить свой собственный javascript внутри этого виджета. Разве что-нибудь, что они делают, не будет восстановлено после обновления?

Ответы [ 3 ]

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

Все остальные «eval is evil» и «качество кода» касаются в стороне ...

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

Опасность использования JavaScript, будь то eval() или иного, позволяет злоумышленнику запускать код от имени пользователя (без согласия)в контексте указанного пользователя (например, браузер / домен).

Это известно как XSS: межсайтовый скриптинг :

Crossдыры в сценариях сайтов - это уязвимости веб-приложений, которые позволяют злоумышленникам обойти защиту на стороне клиента ... путем поиска способов внедрения вредоносных сценариев в веб-страницы [которые могут включать или не включать eval], злоумышленник можетполучить повышенные права доступа к конфиденциальному содержимому страницы, сеансовым cookie-файлам и другой информации, поддерживаемой браузером от имени пользователя.Поэтому атаки с использованием межсайтовых сценариев являются особым случаем внедрения кода.

Счастливое кодирование.

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

JavaScript выполняется на стороне клиента, поэтому ваш сервер не подвергается непосредственной угрозе.

Но это может быть проблемой, если пользователи могут каким-либо образом сохранить свои входные данные и дать ссылку другим пользователям, как это было быразрешить выполнение произвольного JavaScript (то есть: Межсайтовый скриптинг или XSS )

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

См .: "eval is evil" из Эффективного кода JavaScript:

Метод 'eval' и связанные с ним конструкции, такие как 'new Function', чрезвычайно расточительны.Они фактически требуют, чтобы браузер создал совершенно новую среду сценариев (точно так же как создание новой веб-страницы), импортировал все переменные из текущей области, выполнил сценарий, собрал мусор и экспортировал переменные обратно в исходную среду.Кроме того, код не может быть кэширован в целях оптимизации.Эвала и его родственников следует избегать, если это вообще возможно.

...