Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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
Java:安全套接字接受_Java_Sockets - Fatal编程技术网

Java:安全套接字接受

Java:安全套接字接受,java,sockets,Java,Sockets,我得到了其他人编写的多线程服务器应用程序。 当它要用它的ServerSocket对象接受套接字对象时, 它通过一个名为“acceptSocketSafe”的方法运行 以下是程序的一个片段,其中包含了所需的部分代码: public Socket acceptSocketSafe(ServerSocket x) { boolean socketFound = false; Socket socket = null; do { try {

我得到了其他人编写的多线程服务器应用程序。 当它要用它的ServerSocket对象接受套接字对象时, 它通过一个名为“acceptSocketSafe”的方法运行

以下是程序的一个片段,其中包含了所需的部分代码:

public Socket acceptSocketSafe(ServerSocket x)  {
    boolean socketFound = false;
    Socket socket = null;

    do  {
        try {
            socket = x.accept();
            int i = socket.getInputStream().read();

            if ((i & 0xFF) == 14)   {
                socketFound = true;
            }
        } catch (Exception e)   {

        }
    } while (!socketFound);

    return socket;
}
我不明白的是,“acceptSocketSafe”方法是如何使套接字接受比我本该如何做(简单、常规的方法)更安全的。(我相信它与排除恶意连接(例如DDoS)有关)


谢谢你对这个方法的解释

这一点也不安全。这让情况变得更糟

此代码在接受线程上执行客户端I/O。这意味着恶意客户端要发起DOS攻击所要做的就是连接并不发送任何内容。然后,在该客户机发送内容或关闭连接之前,不能接受其他客户机

至于它做什么,它只是拒绝不以14字节开始的客户端连接。这是一个相当弱的测试:256次随机尝试中有1次会通过。通过在应用程序协议中进行适当的错误检查,可以更好地实现这一点。无论如何,你仍然必须这样做,因此根本没有实际的优势

此代码还泄漏被拒绝的套接字


扔掉它。

这是默默无闻的安全。套接字仍然被接受,只是它检查客户端是否发送0x0E(14)作为第一个字节。如果没有,则抛出(顺便说一句,不关闭接受的套接字)

连接后不发送任何内容仍然可能导致DDoS攻击


编辑:仔细看,它甚至不需要是分布式攻击。一个客户端只要不发送任何字节,就会完全阻塞accept循环,任务完成。不管是谁写的,他都不知道自己在做什么。

每个客户都必须发送14号价值,否则服务器就不会跟他说话。它不能防止ddos攻击,但可以区分正确的客户端连接或正确版本的客户端。带有0xFF和布尔值的掩码是冗余的。将该方法命名为“AcceptClientorGoodGuessErrorBlockIndefinitelyInWorldsSimplestDosAttack()”更合适。