Безопасное использование eval() на сервере, отправленном кодом JavaScript

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

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

Вопрос

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

Некоторые примеры использования.

  • Динамически назначенные распределенные вычисления.
  • Клиент-браузер может динамически учиться на сервере.
  • Обновите поведение браузера в унисон.

Ответ 1

eval(), даже если у вас законное использование, просто опасно. Его следует избегать любой ценой. используйте его с осторожностью.

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

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