【发布时间】:2021-09-27 16:39:14
【问题描述】:
这是我在服务器端的代码
socket.on('new message', msg => {
io.emit('new message', {
name: socket.username,
msg: msg
});
});
在客户端
socket.on('new message', function(data) {
var item = document.createElement('div');
item.textContent = data.name+data.msg;
messages.appendChild(item);
window.scrollTo(0, document.body.scrollHeight);
});
它有效,但我想确保安全并尽可能少地公开源代码,所以我想知道这是否可以反过来做,像这样?
socket.on('new message', msg => {
io.emit('new message', () => {
var item = document.createElement('div');
item.textContent = socket.username+msg;
messages.appendChild(item);
});
});
socket.on('new message', function(data) {
data();
});
这行不通,但如果有办法请告诉我。
【问题讨论】:
-
你不能像从服务器端那样控制客户端。 javascript 必须在客户端上运行。
-
我认为你不能通过
socket.io发送不可序列化的数据 -
更广泛地说,如果能够读取您的 JavaScript 源代码会为您打开安全漏洞,那么您的架构本身就有缺陷。浏览器内 JavaScript 的本质是至少需要以浏览器可读的格式传输源代码。
-
你的意思是我需要序列化函数以便客户端可以接收它?
-
@snksaint 一个函数不可序列化...您可以发送一个字符串并在浏览器中对其进行评估,但在客户端评估字符串存储的代码默认情况下会导致灾难。客户端运行的代码不能被信任,默认情况下,您需要确保您的服务器验证所有输入数据,但在客户端,您无能为力(一切客户端都是用户-可修改)
标签: javascript node.js socket.io