在Windows下的传入TCP会话中,远程IP地址是否可以被欺骗?

我在Windows下编写一个HTTP小型服务器。 使用通常的HTTPauthentication机制(我使用Windows HTTP API)来保护对服务器的访问。 但我想没有本地主机的身份validation,即本地用户应该能够访问服务器没有密码。

问题是:保存? 更确切地说,信任TCP连接的远程地址而不需要进一步authentication是安全的吗?

假设对手(Charly)试图发送单个恶意HTTP GET到我的服务器。 此外,假设所有Windows /路由器防火墙入口检查本地主机地址让源地址127.0.0.1和[:: 1]通过。

所以远程地址可能被欺骗,但是对于TCP连接,我们需要一个完整的三方握手。 因此,在接收到SYN时由Windows发送SYN-ACK。 这个SYN-ACK无处不在,但Charly可能会在稍后发送一个ACK。 如果 SYN-ACK的确认SEQ是正确的, 该ACK 被接受。 之后,Charly可以发送恶意负载,因为他知道正确的TCP SEQ和ACK号码。

所以所有的安全性都取决于Windows的TCP输出初始序列号(ISN)的不可预测性。 我不确定这是多么安全,预测下一届会议的ISN有多困难。

任何洞察力是赞赏。

在描述的情况下,攻击者不会从你的Web服务器获取任何数据包。 如果你可以使用诸如digest auth之类的东西(其中服务器首先向客户端发送一个短随机的nonce字符串,然后客户端使用这个nonce来创建一个认证哈希),你会没事的。

如果在系统上安装防火墙是一个选项,你可以使用一个简单的规则,例如“不接受来自其他接口的回应的源IP 127.0.0.1的数据包”。