【发布时间】:2014-04-14 12:40:30
【问题描述】:
我现在正在学习一些新技术(例如node.js、socket.io、redis等)并制作一些简单的测试应用程序,看看它是如何工作的。
我的问题是关于客户端 javascript 代码的安全性:例如,我在 node.js+express 上有一个聊天服务器,当用户连接到这个聊天时,服务器应该分配他的注册用户名(通过 oldschool 授权php+mysql 用于)到他的套接字。问题是,用户可以修改他的客户端脚本并以不同的用户名连接聊天吗?
部分代码如下:
(分配用户名的服务器端部分,只是从客户端调用中获取用户名)
// when the client emits 'adduser', this listens and executes
socket.on('adduser', function(username){
// store the username in the socket session for this client
socket.username = username;
// store the room name in the socket session for this client
socket.room = 'General';
// add the client's username to the global list
usernames[username] = username;
// send client to room 1
socket.join('General');
// echo to client they've connected
socket.emit('updatechat', 'SERVER', 'you have connected to General');
// echo to room 1 that a person has connected to their room
socket.broadcast.to('General').emit('updatechat', 'SERVER', username + ' has connected to this room');
socket.emit('updaterooms', rooms, 'General');
});
(将用户名发送到服务器的客户端部分,对于特定用户,它看起来像 'var username = "User";')
Yii::$app->view->registerJs('var username = "'.$user->identity->username.'";', yii\web\View::POS_HEAD);
(连接函数)
chat.on('connect', function(){
// call the server-side function 'adduser' and send one parameter (value of prompt)
chat.emit('adduser', username);
});
所以问题是:用户可以更改(例如,通过 chrome 开发工具)他在“var username ...”行中的用户名并以不同的名称连接到聊天吗?
附:这种特殊情况只是一个例子,很明显,在聊天中改昵称不仅仅是一个简单的玩笑,但在其他项目中可能会出现类似的情况......
【问题讨论】:
-
"用户可以修改他的客户端脚本" - 是的。永远不要相信客户和他寄给你的东西。 “并以不同的用户名连接聊天?” - 你的服务器应该阻止这种情况。
-
@Bergi,我也这么认为...但我希望我错了:)谢谢)
标签: javascript node.js authentication express socket.io