如果我使用“ localhost”,是否保证客户端是本地的? (考虑到我可以编辑系统主机文件)

问题描述 投票:0回答:1

如果使用this解决方案:

new ServerSocket(9090, 0, InetAddress.getByName("localhost"))

...并且用户更改了它的系统主机文件,以“ localhost”的身份访问我的网站,这是否会阻止非本地客户端的访问?

java security dns
1个回答
0
投票

(对悬赏电话的回应)

与计算机安全一样,保证取决于攻击者功能

  1. 攻击者很la脚,一无所知。然后,是的,localhost保证了客户端的本地性。

  2. 攻击者具有对系统的登录访问权限,并且可以将SSH运行到外部环境。那么就无法保证-SSH可以通过隧道转发内部端口:

ssh -R *:8080:localhost:9090 some.external.server

与Java服务器一起在包装盒上执行此命令将导致建立隧道。发送至some.external.server:8080的所有请求将传递到目标框的localhost:9090

如今,VPS几乎不收费,因此攻击者可以轻松租用这种外部设备,并将其用作本地主机和整个世界之间的代理。

  1. 您可以通过过滤掉Host标头不是localhost的所有请求来保护服务器。通过在转发链中包含标头重写代理(例如nginx),可以很容易地对付它。

摘要

如您所见,保证表示必须严格限制目标框中的用户:没有转发软件。这意味着拒绝用户访问系统实用程序,例如ssh或使用用户权限安装和/或运行它们。除非该盒子是没有任何用户登录或软件重新配置的机顶盒,否则这是极不可能的。

© www.soinside.com 2019 - 2024. All rights reserved.