2010-08-13 9 views
1

У меня есть HTML-страницу с текстовым полем для пользователя ставить выражения, подобные этим:eval-ing текст пользователя. Каковы риски?

(x+23)*2 
((x-y)*(x+y)) 
x*2/z+y 

Пользователь вводит их, и я использую метод «Eval», чтобы выполнить их. Перед вызовом eval я делаю проверку, что нет ничего хитрого (например, попытка определить функцию или подобное).

Мне кажется, что со мной все будет в порядке. Но я представляю отверстие для безопасности, потому что я вызываю «eval» в строке пользователя. В чем опасность?

+0

Нет проблем. Но если он будет сохранен на сервере, тогда вам нужно быть осторожным, чтобы он никогда не отправлялся кому-либо из браузера elses (например, страница «популярные выражения»).Вы не указываете, что делаете это, хотя так, чтобы это было достаточно безопасно в себе – jcoder

ответ

0

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

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

+0

, так я прав? не о чем беспокоиться ? – Lx1

+0

Если вы не отправите код где-нибудь еще, или кто-то еще может указать URL-адрес вашей страницы, где код в URL-адресе будет eval'd, я бы вообще не беспокоился. Как только вы сохраните код, например, на веб-странице с примерами, код может выполняться в браузере человека, который загружает страницу дальше. – mplungjan

1

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

+0

ничего на сервере. Я просто уклоняюсь от своего текстового поля. есть ли риск? – Lx1

+0

Как я уже сказал, пользователь в любом случае может что-либо сделать на своей машине, поэтому вы не добавляете дополнительный риск. – codymanix

0

Если вам посчастливилось иметь JQuery установлен что-то подобное может произойти, если не проверено:

$.getScript("test.js"); 

http://api.jquery.com/jQuery.getScript/

+0

такой же, как javscript: void ($. GetScript ("test.js")) из строки местоположения – mplungjan

+0

и так что? что случилось? – Lx1

+0

так же, как если бы пользователь вставлял его в ваше текстовое поле и имел это значение. jQuery загрузил бы скрипт – mplungjan

0

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

+0

как? Предположим, я разрешаю любой изворотливый сценарий ... ну и что? – Lx1

1

Главное беспокоиться о том, могут ли они сформировать URL-адрес и отправить его кому-то, а затем выполнить eval на другом компьютере, нажав на URL-адрес. Это было бы возможно, если ваша форма использует GET или даже если вы не различаете GET/POST при оценке формы.

Есть другие вещи, которые вы можете сделать, чтобы быть более уверенными.

1

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

+0

Вы сказали: Любой может Eval Javascript на странице, которую они посещают, вы не можете остановить их. Как вы это понимаете? – Lx1

+0

javascript: window.alert (document.location) –

+0

жаль, что я вас не понимаю. что это ? – Lx1

0

Что вы подразумеваете под «Я делаю чек, что нет ничего изворотливого»? Черный список некоторых ключевых слов не работает. Например,

eval("func"+"tion() { window.alert('haha'); }()"); 

Как сказал Лу, вы должны волноваться, когда добавляете функциональность на страницу. Если вы добавите кнопку «Поделиться этим», которая делает ссылку на http://example.com/mypage?expr=x-1, нетрудно обмануть ничего не подозревающего пользователя, чтобы щелкнуть ссылку, которая украла файлы cookie.

Я уверен, вы можете найти там песочницу JavaScript.

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