Безопасное использование 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, с пользовательскими строковыми командами, которые будут анализироваться на стороне клиента.