windows - 远程 IP 地址是否可以在 Windows 下的传入 TCP session 中被欺骗?

标签 windows http authentication tcp

我在Windows下写了一个HTTP小型服务器。使用通常的 HTTP 身份验证机制(我使用 Windows HTTP API)保护对服务器的访问。但我不想对本地主机进行身份验证,即本地用户应该能够在没有密码的情况下访问服务器。

问题是:那是保存吗?更准确地说,在没有进一步授权的情况下信任 TCP 连接的远程地址是否安全?

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

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

因此,所有安全性都取决于 Windows 的 TCP 传出初始序列号 (ISN) 的不可预测性。我不确定这有多安全,预测下一个 session 的 ISN 有多难。

欢迎任何见解。

最佳答案

在您描述的场景中,攻击者不会从您的网络服务器获取任何数据包。如果您可以使用摘要身份验证之类的东西(其中服务器首先向客户端发送一个简短的随机随机数字符串,然后客户端使用该随机数来创建身份验证哈希)就没问题了。

如果可以选择在系统上安装防火墙,您可以使用一个简单的规则,例如“不接受来自除环回以外的任何接口(interface)的源 IP 为 127.0.0.1 的数据包”。

关于windows - 远程 IP 地址是否可以在 Windows 下的传入 TCP session 中被欺骗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18852577/

相关文章:

windows - 如何在 Windows 中轮换 tomcat 日志?最好的方法是什么?

c# - 如何在运行 exe 后关闭 cmd 窗口。从它的文件?

asp.net - 如何嗅探http请求

c# - 在 C# 中从 context.httprequest 读取原始数据

java - 我可以将表单登录页面 html 放入 Web 应用程序的库中吗?

c - Windows下C程序的内存使用情况

c - Windows 中的窗口消息 49373 (0xC0DD) 是什么?

ruby-on-rails - 返回哪个 http 状态代码,404 或 422?

python - Django Rest 框架 JWT "Authentication credentials were not provided."}

objective-c - mount_smbfs 上出现身份验证错误