我得到了别人编写的这个多线程服务器应用程序。 当它要接受带有 ServerSocket 对象的 Socket 对象时, 它通过一个名为“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)。
感谢您对此方法的任何解释!
最佳答案
这是默默无闻的安全。无论如何,套接字都会被接受,只是它检查客户端是否发送 0x0E (14) 作为第一个字节。如果没有,它会抛出(顺便说一句,不会关闭接受的套接字。)。
只要在连接后不发送任何内容,仍然可能受到 DDoS 攻击...
编辑:仔细观察,它甚至不需要是分布式攻击。单个客户端不发送任何字节将完全阻塞接受循环,任务完成。不管是谁写的,都不知道他在做什么。
关于Java:安全套接字接受,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24555185/