如何验证来自 socket.io 的数据包?
How to validate packets from socket.io?
您好,我正在使用 node.js
、socket.io
和 canvas
编写游戏,想知道如何正确验证数据包。我的印象是用户可以使用数据包注入程序来发送服务器不期望的数据包。例如,
- 发送一个参数超出正常范围的数据包(x 或 y 超出游戏 space)
- 发送超大数据包使服务器不堪重负
- 发送一个包含服务器不期望的附加参数的数据包
- 发送一个包含数据的数据包,读取后可能会在服务器上执行命令(转义字符?)
- 一遍又一遍地发送相同的数据包使服务器不堪重负 (DoS)
为防止此类事情采取的典型措施是什么?有些子弹不是真正的问题吗?我错过了什么吗?是否有任何图书馆可以协助解决这些问题?
我一次拿这些:
Send a packet with one of the parameters outside of normal bounds (x
or y beyond game space)
这完全取决于您的服务器代码测试所有传入值以确保它们在适当的范围内。
Send extremely large packets to overwhelm the server
关于如何保护 socket.io 免受此类 DOS 攻击,有单独的讨论。我会去寻找 link 并在找到后进行编辑。
Send a packet with additional parameters the server is not expecting
同样,这完全取决于您的服务器来验证所有传入数据。您的代码可能只是忽略了其他参数。 Socket.io 使用 JSON 格式发送数据,即 "safe"。额外的参数只会被闲置,只要您的代码不访问它们,它们就没有害处。邮件中只是一些额外的垃圾。
Send a packet with data that, when read, may execute commands on the
server (escape characters?)
这通常是不可能的,除非您的服务器在处理数据时做了一些危险的事情。正如我之前所说,所有数据都以 JSON 的形式发送,它以安全的方式进行解析,没有任何已知的转义字符或其他类似漏洞。您必须确保完全验证您处理的任何数据,这样您就不会冒险打开自己的服务器进行 SQL 注入等事情......这一切都与您对传入的操作有关数据(特别是字符串)。在发送给您的字符串上调用 eval()
之类的事情非常危险,但这通常不是人们会做的事情。
Send the same packet over and over to overwhelm the server (DoS)
通常的保护措施是速率限制,您可以限制单个客户端在给定时间内可以发送的数据包数量。如果它们超过某个阈值,则断开它们。如果他们继续,您将禁止他们的用户帐户。
您好,我正在使用 node.js
、socket.io
和 canvas
编写游戏,想知道如何正确验证数据包。我的印象是用户可以使用数据包注入程序来发送服务器不期望的数据包。例如,
- 发送一个参数超出正常范围的数据包(x 或 y 超出游戏 space)
- 发送超大数据包使服务器不堪重负
- 发送一个包含服务器不期望的附加参数的数据包
- 发送一个包含数据的数据包,读取后可能会在服务器上执行命令(转义字符?)
- 一遍又一遍地发送相同的数据包使服务器不堪重负 (DoS)
为防止此类事情采取的典型措施是什么?有些子弹不是真正的问题吗?我错过了什么吗?是否有任何图书馆可以协助解决这些问题?
我一次拿这些:
Send a packet with one of the parameters outside of normal bounds (x or y beyond game space)
这完全取决于您的服务器代码测试所有传入值以确保它们在适当的范围内。
Send extremely large packets to overwhelm the server
关于如何保护 socket.io 免受此类 DOS 攻击,有单独的讨论。我会去寻找 link 并在找到后进行编辑。
Send a packet with additional parameters the server is not expecting
同样,这完全取决于您的服务器来验证所有传入数据。您的代码可能只是忽略了其他参数。 Socket.io 使用 JSON 格式发送数据,即 "safe"。额外的参数只会被闲置,只要您的代码不访问它们,它们就没有害处。邮件中只是一些额外的垃圾。
Send a packet with data that, when read, may execute commands on the server (escape characters?)
这通常是不可能的,除非您的服务器在处理数据时做了一些危险的事情。正如我之前所说,所有数据都以 JSON 的形式发送,它以安全的方式进行解析,没有任何已知的转义字符或其他类似漏洞。您必须确保完全验证您处理的任何数据,这样您就不会冒险打开自己的服务器进行 SQL 注入等事情......这一切都与您对传入的操作有关数据(特别是字符串)。在发送给您的字符串上调用 eval()
之类的事情非常危险,但这通常不是人们会做的事情。
Send the same packet over and over to overwhelm the server (DoS)
通常的保护措施是速率限制,您可以限制单个客户端在给定时间内可以发送的数据包数量。如果它们超过某个阈值,则断开它们。如果他们继续,您将禁止他们的用户帐户。