Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过套接字安全地发送二进制数据,并确保无人可以重新发送?_Php_Vb.net_Sockets_Security_Tcp - Fatal编程技术网

Php 如何通过套接字安全地发送二进制数据,并确保无人可以重新发送?

Php 如何通过套接字安全地发送二进制数据,并确保无人可以重新发送?,php,vb.net,sockets,security,tcp,Php,Vb.net,Sockets,Security,Tcp,首先,我将统计我正在构建的内容,以便有人能够为我的问题提供替代解决方案 Soo,基本上有一款游戏可以选择多人游戏 我有一台服务器。。然而,有一个问题是,人们在游戏中添加非法mod,以便在服务器上获得不公平的机会 因此,我的想法是为游戏创建一个自定义启动器,基本上首先检查游戏是否已修改,如果未修改,它会向服务器发送一个TCP请求,玩家使用IPxx.xx.xx调用BLA的服务器没有任何修改,现在就要加入 顺便说一句,连接是用AES128加密保护的 现在谈谈我的实际问题 苏。。当我创建加密/解密系统

首先,我将统计我正在构建的内容,以便有人能够为我的问题提供替代解决方案

Soo,基本上有一款游戏可以选择多人游戏

我有一台服务器。。然而,有一个问题是,人们在游戏中添加非法mod,以便在服务器上获得不公平的机会

因此,我的想法是为游戏创建一个自定义启动器,基本上首先检查游戏是否已修改,如果未修改,它会向服务器发送一个TCP请求,玩家使用IP
xx.xx.xx
调用
BLA
的服务器没有任何修改,现在就要加入

顺便说一句,连接是用AES128加密保护的


现在谈谈我的实际问题

苏。。当我创建加密/解密系统时。(它是AES和base64的混合体),我注意到人们可以嗅探套接字,然后将从启动器发送的哈希复制到服务器,然后使用任何套接字客户端应用程序只按原样发送哈希,而无需修改

然后服务器会简单地认为是发起者发送的,并实际相信它,然后允许该玩家:/

所以我想问的是,有没有办法解决这个问题? 例如,创建一种方法,使哈希只能使用一次

提前感谢您提供的任何帮助,非常感谢。
除套接字之外的其他解决方案也被接受:)

这里有一些问题需要讨论,例如如何使加密通信不可重放,以及最终令人沮丧的发现,即使解决了这个问题,实际上也不会使系统安全

要修复加密通信的可重放性,您可以使用一个已对此进行保护的协议(例如SSH),或者滚动您自己的解决方案,让您的服务器向客户端发送一个大的随机数,然后客户端将该数字包含在包含哈希的加密负载中。然后,服务器可以轻松地验证返回的数字是否与它生成的数字匹配,以确保没有重放整个负载

然而,这里的问题与在客户端计算机上运行的所有DRM解决方案所面临的问题是相同的,即您的代码可能会被破坏和调试。没有什么可以阻止攻击者简单地调试您的代码并找到您的加密密钥,从而能够精心编制自己的消息来表明其客户端是有效的

这显然比简单的重播攻击更难,但如果您的游戏/服务器在任何方面都受欢迎,那么这不仅是可能的,而且是可能的。更复杂的客户端安全模型已经被打破,最终没有真正的方法让它们变得不可能,只是变得更加困难(除了一些专用的硬件解决方案)


唯一真正的解决方案是确保服务器端的客户端不具有优势。这意味着所有客户机操作都经过服务器端验证,客户机知识仅限于他们应该拥有的信息。不幸的是,这并不总是能够做到完美,这就是为什么墙破解和其他作弊仍然存在于最流行的游戏中。

当然,只要跟踪发送的哈希值,当它“返回”时,将其标记为“已使用”。为什么不使用SSH这样的既定协议进行套接字连接呢?我在考虑这个问题,但问题是可能会发生巧合,并且有一天会生成相同的哈希,因此我非常确定有另一种更好的方法来代替套接字。。是的,这是我最后的解决办法。乔纳森,你说嘘是什么意思?。。你是说ssl?我不能使用SSH,因为它在脚本语言中不受支持。。对于服务器,没有这样的插件。因此,我将使用我自己的方式,感谢您向我指出它是如何完成的:)当有人连接到套接字时,随机IV将被加密发送到客户端,然后客户端将解密,然后使用该IV进行散列。。现在几乎不可能进行模拟,因为他们没有创建新哈希或解密IV:)的密钥。