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



如果我使用此解决方案:

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

并且用户将其系统主机文件更改为"localhost"访问我的网站,这是否无法阻止来自非本地客户端的访问?

(响应赏金呼叫(

在计算机安全方面,保证取决于攻击者的能力

  1. 攻击者是跛脚的,什么都不知道。那么是的,localhost保证客户端的位置。

  2. 攻击者可以登录访问系统,并可以运行SSH访问外部世界。然后没有保证-SSH可以通过隧道转发内部端口:

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

使用java服务器在box上执行此命令将导致建立隧道。寻址到some.external.server:8080的所有请求将被传递到目标盒的localhost:9090

VPS现在几乎不需要任何费用,所以攻击者可以很容易地租用这样的外部盒子,并将其用作本地主机和整个世界之间的代理。

  1. 您可以尝试通过过滤掉Host标头不是localhost的所有请求来保护服务器。通过在转发链中包含一个头部重写代理(如nginx(,可以很容易地对其进行反测量

摘要

正如您所看到的,保证意味着目标框中的用户必须受到严格限制:没有转发软件。这意味着拒绝用户访问ssh等系统实用程序,或者以用户权限安装和/或运行它们。除非机顶盒是没有任何用户登录或软件重新配置的机顶盒,否则这种情况极不可能发生。

本地主机地址

对这个问题的第一条评论提出了localhost名称解析的一个技巧:

用户可能会覆盖localhost,使其不再是127.0.0.1

这个想法是将一条记录放置到/etc/hostsc:WindowsSystem32Driversetchosts,将localhost名称绑定到另一个IP地址。

如果你的盒子有一个以太网连接,比如说,地址为1.2.3.4,那么线路

1.2.3.4 localhost

可能导致localhost地址的更改。如果发生这种情况,则线路

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

将绑定外部网络接口上的端口9090,该接口可从机箱外部访问。

我在Ubuntu18.04上试过这个,它成功了。我成功地连接到了Pasific另一边盒子里运行在localhost上的应用程序。

但是

从前,MS Windows开发人员将localhost硬编码为127.0.0.1。这是关于这一点的Medium帖子。

我检查了我的Windows 10盒子。已确认:localhost解析为127.0.0.1。测试程序

package org.example;
import java.net.*;
import java.io.*;
public class TryLocalhost {
public static void main(String[] args) throws IOException {
System.out.println("localhost: " + InetAddress.getByName("localhost"));
}
}

产生

localhost: localhost/127.0.0.1

而CCD_ 17文件试图将CCD_

# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost
#   ::1             localhost
192.168.0.198 localhost

该评论来自微软。

相关内容

  • 没有找到相关文章

最新更新