【问题标题】:Socket.io, Security and MultiplayerSocket.io、安全和多人游戏
【发布时间】:2014-01-06 17:53:09
【问题描述】:

我目前正在制作一个在线游戏,我想知道 Node.js 和 socket.io 的安全性。

游戏的当前状态

我的全部

io.sockets.on('connection', function (socket) {
    socket.on('request', function (data) {
}) });

是安全的。玩家可以使用任何数据(指“数据”)发出任何请求(在此示例中请求指“请求”),即使他们手动修改他们发出的请求和数据,他们也无法利用它并绕过客户端基本安全。他们也无法通过发送无效数据使服务器崩溃。

注意:我只有 2 个发射:发射用户/通行证以登录和发射输入。服务器通过各种“发射”发送数据。 session() 或 GET/POST 没有“通常”的概念。在客户端,我只使用

 var socket = io.connect('http://something:3000');
 socket.emit('request', data);

对于玩家获取代码+图片所需的静态资源,如下所示:

 app.use(express.static(__dirname + '/public'));

对于数据库:

 client = mysql.createConnection({  host: 'localhost',  user: 'root',   password: 'something',});
 client.connect(); client.query('USE dbname'); 

最后对于路由?,无论请求如何,我都会显示相同的页面:

 app.get('/', function (req, res) { 
      res.sendfile(__dirname + '/index.html'); 
 });

关注点:

  • 是否有人可以通过注入以外的其他方式访问我的数据库?
  • 谁能修改一下大家加载的静态资源?
  • 有人可以访问整个服务器脚本或以某种方式修改其变量吗?
  • 有没有办法限制最大并发连接数和一次发送的最大数据量?
  • 我需要任何安全模块吗?
  • 您认为合适的任何其他问题。

非常感谢。

【问题讨论】:

    标签: node.js security express socket.io


    【解决方案1】:

    关于你现在所拥有的 - 一切看起来都很好。除此之外,您不使用消息名称,而是将所有内容修补到 request 消息中。不要认为这是好方法,而且我看不出这种决定背后的安全原因。您还可以订阅和取消订阅不同的套接字消息 - 更容易管理请求点的“可见性”。

    您可以通过两种方式查看应用程序的安全性:

    技术
    它与您的服务器设置、数据库凭据、防火墙、文件权限、域名和其他位相关,这些并非直接来自应用程序本身。
    您在这里关心的是确保访问服务器并不容易,并且修改文件更加复杂。尽管在任何情况下都存在风险,即使是最受保护的情况也是如此。
    可靠的托管服务(这里的云是最安全的恕我直言)。
    访问服务器的凭据 - 也必须得到保护。即使有人会得到这些,仍然需要他们一些时间才能进入您的服务和数据库。有能力抵抗这种情况(防火墙、ftp/ssh 设置等)。

    逻辑
    这种关于您的安全性的观点特别关注您的应用程序逻辑和以某种方式克服它的能力。
    不过,这是个大话题,您可能想大致阅读一些有关此的书籍。
    要考虑的最简单的事情是一些关于架构方式的通用规则。例如:

    • 只有服务器做出决定。对于游戏来说尤其如此。
    • 不要相信客户的决定。作为信任 - 导致作弊。服务器的工作量更大,但为了防止作弊,它的工作量就更少了。因此,尽早从“询问客户”和“决定服务器”之间的正确“政治”互动开始。
    • 验证一切,并在服务器出现严重问题时抛出错误/断开连接。
    • 日志记录但要小心(不要将所有内容都写入文件 - 这可能会导致安全问题,特别是如果您使用一些基于 html 的日志系统,则可以通过 http 请求注入 JS - 存在潜在危险。
    • 在服务器端没有eval
    • 密码散列 - 用于密码和其他内容。还要保护好你的“盐”和“香料”:D。因此,即使闯入您的数据库,也不会让任何人轻松访问密码。
    • 使用会话存储数据。会话将帮助您在未来横向扩展您的应用程序,因为限制为一个进程并将内容存储在内存中 - 是高效的,但不可扩展。
    • 身份验证 - 使用可靠的方法,可能是 SSL(WSS、HTTPS)。
    • 了解您的用途 - 这有助于尽可能防止模块出现意外行为。
    • 了解它是如何工作的 - 例如对于会话 - 您需要了解识别机制的工作原理(cookie 等),以及会话数据的存储方式(内存中、db、redis 等)李>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      相关资源
      最近更新 更多