Вопрос по node.js, javascript, websocket – Безопасное использование eval () для отправленного сервером кода JavaScript

11

Я использую Node.js и Socket.io. Я написал приложение, которое может отправлять фрагменты JavaScript с сервера и выполнять их на клиенте. JavaScript отправляется через Secure WebSocket (WSS), и у клиента есть прослушиватель, который выполнит любой код, переданный ему через сервер.

Этот короткий сценарий демонстрирует принцип:http://jsfiddle.net/KMURe/ и вы можете думать о функции onScript как о слушателе сокета.

Question

Какие протоколы безопасности я могу установить, чтобы сделать эту транзакцию безопасной? Не затруднит ли защищенный канал веб-сокета третье лицо в качестве посредника (изменяя код перед его отправкой клиенту)?

Some Use Cases.. Dynamically assigned distributed computation. Browser client can dynamically learn from the server. Update browser behavior in unison.
Я не понимаю, почему он будет менее безопасным, чем HTTPS, но это выглядит странно. Можете ли вы загрузить все клиентские сценарии заранее, и сервер просто отправит имя вызываемой функции? Dagg Nabbit
Это звучит интересно. Это похоже на то, что сервер будет решать, что делать дальше, в зависимости от того, как ответит клиент, поэтому могут быть некоторые проблемы безопасности, специфичные для вашей проблемной области, в зависимости от того, что именно, но ничего похожего на атаки MITM, я думаю ... протокол должен справиться с этим. Dagg Nabbit
Да, это верный момент. Это в основном экспериментальная идея, я нахожу ее интересной темой ... потенциально позволяющей веб-серверу отправлять код по своему усмотрению, и клиент может учиться на этом коде. Я считаю, что сервер - это учитель, а клиенты - студенты. Jack

Ваш Ответ

1   ответ
8

eval()Даже если у вас есть законное использование, это просто опасно. Вам следуетavoid using it at all costs. используйте это с осторожностью.

Однако, если это действительно необходимо, вы можете использовать строгий режим через"use strict" command, когдаeval() is executed in a strict functionсодержимое eval не будет просачиваться в непосредственном объеме. Код в eval будетсодержалась вeval() сама по себе (как если бы она имела собственную область видимости).В демопопробуйте убрать трейлингx а такжеeval() вернусьundefined.

Но все же, используяeval() опасный. Лучше, если вы найдете альтернативы, такие как JSON, с пользовательскими строковыми командами, которые будут проанализированы на стороне клиента.

Как ни странно, использование JSON в старых браузерах ... требует использованияeval().
@Kolink, который считается одним из законных применений
Зло Eval переоценено. В первые дни его называли злом, потому что он использовался неуместно для оценки строк в выражениях (и многих других вещах), где это просто не было необходимо. JSON, функция, вызываемая как функция и т. Д., Более или менее эквивалентнаevalПросто используйте правильный инструмент для работы.
Насколько я понимаю, eval () небезопасен, когда существует вероятность вредоносного внедрения кода. Я хочу предотвратить эту злонамеренную инъекцию с помощью безопасного канала сокета, а также буду следить за тем, чтобы все, что отправлено с клиента на сервер, было санировано. Это полностью удаляет зло из eval? (извините за каламбур) :) Jack
Некоторые люди не согласны (не я лично, просто другие люди), потому что выcould разобрать JSON вручную, сделавeval ненужным.

Похожие вопросы