Мне нужно использовать eval () для веб-приложения на основе JavaScript, которое я создаю.
Причина этого в том, что я хочу позволить людям писать свои собственные функции, которые сохраняются в виде текста и могут быть повторно использованы на сайте, когда им нужно будет использовать их в другой раз. Подумайте в духе jsFiddle.
Код будет либо запущен и оценен, либо вставлен как тег скрипта. В любом случае он оставляет сайт открытым для внедрения кода JavaScript злоумышленниками. Таким образом, я планирую либо фильтровать отправленный код, либо, когда пользователь загружает сценарий другого пользователя, выводить предупреждающее сообщение о том, что пользователь должен сначала прочитать / проверить сценарий, прежде чем продолжить.
Пока что я хочу отфильтровать / предупредить по следующим ключевым словам:
eval
execScript
script
window.*
setInterval
setTimeout
alert
confirm
prompt
document.*
write
innerHTML
insertAdjacentHTML
createElement
appendChild
setAttribute
form.*
submit
XMLHttpRequest
jQuery.*
ajax
base64encode
base64decode
Я еще не приступил к тестированию, так что это только мои первые мысли.
У кого-нибудь есть опыт или мнение по этому поводу?
Спасибо, Дэйв
eval
. - person canon   schedule 03.10.2012self[['a', 'lert'].join('')] ("BOO");
- я только что обошел ваш фильтр. И я могу продолжать делать это, пока вижу ваш код, что, конечно же, поскольку это JS, я могу .. - person Stephen   schedule 03.10.2012new Function
создает новую область видимости и не имеет доступа к локальным переменным текущей области, в то время какeval
имеет доступ, поэтомуnew Function
кажется более безопасным. - person elclanrs   schedule 03.10.2012eval
- person Bergi   schedule 03.10.2012window
global.new Function()
только скроет текущую область видимости, но это предполагает, что настоящая проблема заключается в вещах в текущей области. (Подсказка: это не так.) - person cdhowie   schedule 03.10.2012