首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java:安全套接字接受

Java:安全套接字接受
EN

Stack Overflow用户
提问于 2014-07-03 05:36:12
回答 2查看 302关注 0票数 0

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

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

代码语言:javascript
运行
AI代码解释
复制
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))。

谢谢您对此方法的任何解释!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-03 06:37:58

这是默默无闻的安全。套接字无论如何都会被接受,只是检查客户端是否将0x0E (14)作为第一个字节发送。如果没有,则抛出(而不关闭接受的套接字)。

只要在连接后不发送任何东西,这件事仍有可能.

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

票数 1
EN

Stack Overflow用户

发布于 2014-07-03 06:37:20

一点也不安全。这会让事情更糟。

此代码在接受线程上执行客户端I/O操作。这意味着,恶意客户端安装DOS攻击所需做的就是连接和发送任何东西。然后,只有在客户端发送或关闭连接之前,才能接受其他客户端。

至于它所做的事情,它只是拒绝了不以14字节开头的客户端连接。这是一个很弱的测试:256个随机尝试中就有1个会通过。通过在应用程序协议中进行适当的错误检查,可以更好地完成这一任务。无论如何,你还是要这样做,所以根本就没有实际的优势。

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

把它扔掉。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24555185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档