如果连接是本地主机,如何使用 javascript 检查?

     2023-02-25     194

关键词:

【中文标题】如果连接是本地主机,如何使用 javascript 检查?【英文标题】:How to check with javascript if connection is local host? 【发布时间】:2011-03-10 21:35:39 【问题描述】:

如果加载的页面在我的本地机器上,我想检查我的 javascript。

我想这样做的原因是,当我开发时,我喜欢确保我的服务器端 (C#) 验证都正常工作。所以我喜欢看到客户端和服务器端的错误都显示出来。

因此,当我在测试时,我的 jquery 验证内容中有一个标志,它总是让无效数据通过。这样我可以一次性看到客户端和服务器错误。

但是现在从开发到生产时,我必须手动来回更改。

【问题讨论】:

我只是提醒任何人在任何这些答案中使用这些方法中的任何一种来向系统“添加”功能,特别是如果所述功能可用于在您的系统中公开其他安全信息或数据.然而,使用这种技术“删除”功能是有意义的。例如,如果您想在开发环境中禁止触发分析跟踪,即使您在生产环境中执行此操作也是如此。请仔细考虑一下您通过浏览器端条件或切换暴露的内容以及它如何成为安全漏洞。 【参考方案1】:

location.hostname 变量为您提供当前主机。这应该足以让您确定您所处的环境。

if (location.hostname === "localhost" || location.hostname === "127.0.0.1")
    alert("It's a local server!");

【讨论】:

难道没有更通用的/“包罗万象”的解决方案也可以涵盖使用 127.0.0.1 等的情况吗? 这是错误的。许多人编辑他们的主机文件,因此找不到“localhost”这个词 我同意。这是错误的。通过网络驱动器访问“本地”文件时也不起作用。 @Sumit 通过文件接口可以检查主机名是否为空 呃不知道为什么每个人都说这是错误的。这个简单的剪辑非常适合我在本地主机和生产环境中使用。我的软件知道投放广告的天气——或者不知道,只需要 1 行简单的代码。谢谢OP。【参考方案2】:

如果在浏览器中启动静态html,例如从file:///C:/Documents and Settings/Administrator/Desktop/ 之类的位置检测“localhost”将不起作用。 location.hostname 将返回空字符串。所以

if (location.hostname === "localhost" || location.hostname === "127.0.0.1" || location.hostname === "")
    alert("It's a local server!");

【讨论】:

我遇到了这个确切的问题,虽然我自己想出了解决方案,但这个答案应该仍然更高。【参考方案3】:

仍然不是全部,但可能会有所改进。 您现在可以创建一个域数组并使用.includes

const LOCAL_DOMAINS = ["localhost", "127.0.0.1", ...];

if (LOCAL_DOMAINS.includes(window.location.hostname))
  alert("It's a local server!");

【讨论】:

警告:IE11 不支持“.includes”【参考方案4】:

这就是它在 React, register service worker 中的检查方式,这是通过检查主机名来检查您是否在 localhost 上的好方法,包括 localhostIPv6,匹配以 127 开头:

const isLocalhost = Boolean(
    window.location.hostname === 'localhost' ||
    // [::1] is the IPv6 localhost address.
    window.location.hostname === '[::1]' ||
    // 127.0.0.1/8 is considered localhost for IPv4.
    window.location.hostname.match(
        /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))3$/
    )
);

【讨论】:

Boolean() 包装器在这里扮演什么角色?【参考方案5】:

使用与其他脚本相同的机制的最短形式:

if ( ["localhost", "127.0.0.1", ""].includes(window.location.hostname) ) 
     console.log("It's local host !");

【讨论】:

警告:IE11 不支持“.includes”【参考方案6】:

本文还涵盖了一些常见的本地网络 IP 以 10.0.192.168. 开头或类似 Bonjour 的域以 .local 结尾的情况:

export function isLocalNetwork(hostname = window.location.hostname) 
  return (
    (['localhost', '127.0.0.1', '', '::1'].includes(hostname))
    || (hostname.startsWith('192.168.'))
    || (hostname.startsWith('10.0.'))
    || (hostname.endsWith('.local'))
  )

【讨论】:

【参考方案7】:

执行此操作的一种简单方法是仅根据 localhost 检查主机名或根据子字符串检查您的自定义域名,在本例中为“.local” url,例如 http://testsite.local

var myUrlPattern = '.local';
if (window.location.hostname === "localhost" || location.hostname === "127.0.0.1" || window.location.hostname.indexOf(myUrlPattern) >= 0) 
    alert("It's a local server!");

【讨论】:

【参考方案8】:
const LOCAL_DOMAINS = [ "localhost", "127.0.0.1" ];

/* offline || development */
if ( LOCAL_DOMAINS.includes(location.hostname) )

    BASE_URL_PUBLIC = location.hostname + "/folder/website/"; // your project folder


/* online || production */
else

    BASE_URL_PUBLIC = location.hostname;

【讨论】:

【参考方案9】:

您可以使用 c# 在页面后面的代码中检测到,如下所示:

if ((Request.Url.Host.ToLower() == "localhost"))

    // ..., maybe set an asp:Literal value that's in the js

或者,如果您想从客户端脚本执行此操作,您可以检查 window.location.host 的值。

if (window.location.host == "localhost")

    // Do whatever

希望这会有所帮助。

【讨论】:

location.host 包括主机名和端口。请改用 location.hostname。【参考方案10】:

以上答案大多解决了问题,但是......

如果 localhost 不一定是 'localhost/' 怎么办? 如果您想在开发过程中进行 FE 验证怎么办? 如果您希望在开发期间有不同的行为怎么办 (有验证,有验证,没有验证

一种解决方案是设置位置哈希并检查它。

http://myname.foo.com/form.html#devValidation

您可以通过开关添加无限选项

switch(location.hash) 
    case '#devValidation':
        // log the results and post the form
        break;
    case '#beValidation':
        // skip front end validation entirely
        break;
    case '#noValidation':
        // skip all validation $('[name=validationType']).val('novalidation');
        break;
    case '#feValidation':
    default:
        // do fe validation
        break;

【讨论】:

这个解决方案还是有一些人工操作,可以被篡改。 我认为“手动工作”是微不足道的,因为我们可以在没有 javascript 批准的情况下提交我们喜欢的任何内容,并且大多数框架都有过滤器,可以在请求到达应用程序之前缓解攻击。也许允许 OP 跳过服务器端验证是一种风险,但它只是为了显示在哈希中使用密钥的实用性而添加的。 我从不使用 localhost 或环回,因为将数十个国际化客户端(clinetA.com、clientA.de、clientB.com、clientB.au 等)列入白名单很快就会成为一场噩梦。我决定提供这个解决方案是因为它不关心域,并且可以在没有补丁的情况下在实时站点中进行检查。【参考方案11】:

正则表达式较慢*,但简短而整洁。此外,这里没有人检查 IPv6 localhost (::1)

/localhost|127\.0\.0\.1|::1|\.local|^$/i.test(location.hostname)

它检查一般 localhost、.local 域和文件:(空主机名)。

*) 在 Chrome 中,[].includes(...) 的性能最好(42 ms),其次是带有数组项检查的简单循环(for、while)(119 ms),然后是[].indexOf(...) > -1(289 ms),最后是正则表达式(566 毫秒)。 但这些测量值在某种程度上是相对的,因为不同的浏览器进行了不同的优化。在 FF 52 ESR 中,includesindexOf 有相似的结果,正则表达式慢 2 倍,循环慢 6 倍。

【讨论】:

【参考方案12】:

基于上述 cmets th 以下正则表达式帮助我验证 如果 url 是 'localhost',任何 IP 地址 IPv4 或 IPv6。

window.location.hostname.match(/localhost|[0-9]2,3\.[0-9]2,3\.[0-9]2,3\.[0-9]2,3|::1|\.local|^$/gi)

【讨论】:

如何禁止mysql的dns反查功能

...IP地址进行检索,查看客户端的主机名是否在Host缓存中。如果Host缓存中不存在,MySQL服务器会尝试解析主机名。首先,MySQL服务器会解析主机名对应的IP地址,并与客户端的原始IP地址进行比较,确保是同一个IP地址。然后MySQL服... 查看详情

如何远程连接阿里云主机服务器

参考技术A如果你用的WIN系统:在本地电脑点开始-运行,输入mstsc按确定,按提示输入云主机的IP用户和密码,点登录.即可远程连接.如果你用的LINUX系统:建议下载一个PUTTY远程连接工具,运行.按提示输入IP.连接,然后依次输入用户和密码,... 查看详情

连接本地主机(桌面)失败[关闭]

...i调用方法,但使用本地IP地址仍然没有得到正确的响应。如果我在邮递员中测试,我得到了正确的json响应,但在androidstudio中我面临这个连接问题。错误...>HTTPFAILED:java.net.SocketTim 查看详情

如何让套接字仅接受来自本地主机的连接(在 Java 中)?

...地主机的连接。目前,在接受连接后,它会检查对等IP,如果它不是环 查看详情

WebSocket 安全本地主机连接

】WebSocket安全本地主机连接【英文标题】:WebSocketSecurelocalhostconnection【发布时间】:2013-10-2811:09:37【问题描述】:我已经构建了一个简单的Node.jsWebSocketchatserver。我可以在终端选项卡中的localhost上运行它。在另一个终端选项卡中... 查看详情

WebSocket 安全本地主机连接

】WebSocket安全本地主机连接【英文标题】:WebSocketSecurelocalhostconnection【发布时间】:2013-10-2811:09:37【问题描述】:我已经构建了一个简单的Node.jsWebSocketchatserver。我可以在终端选项卡中的localhost上运行它。在另一个终端选项卡中... 查看详情

如何使 mysql 访问公开,而不仅限于本地主机?

...试将zapier连接到在aws中使用bitnamiwp站点安装的mysqldb,但如果访问仅限于本地主机,我似乎无法连接它们。关于如何更改它以使其正常工作的任何想法?这是我的安全组的样子 查看详情

本地主机拒绝使用 laravel 帆(Docker)连接

】本地主机拒绝使用laravel帆(Docker)连接【英文标题】:Localhostrefusedtoconnectusinglaravelsail(Docker)【发布时间】:2021-08-3001:34:35【问题描述】:我的应用程序运行顺利,直到我在documentation之后安装了laraveloctane,然后localhost拒绝工... 查看详情

如何远程连接阿里云主机服务器

...安装操作系统的.所用操作系统不同.远程的方法也不一样.如果用WIN系统.只需要在本地电脑点开始-运行.输入mstsc按确定,然后依次输入云主机的IP用户和密码.即可远程登录.如果用LINUX系统.建议下载一个PUTTY的工具,安装运行.然后先... 查看详情

主机端口镜像如何转发到虚拟机esxi

...过了,但是思路是一样的。Step1:启动VMwareInfrastructureClient如果你用ESXI,你会发现与server版是不同的,因为装ESXI的机器没有其它软件。这就意味着不能直接在机器上操作,相反你需要使用client连接ESXI来远程管理它。在这点上,ESXI... 查看详情

scp对拷如何连接指定端口远程主机

...而非本地主机的端口3. 这种拷贝方式需要输入密码,如果不想输出密码(比如Jenk 查看详情

主机是宽带连接上网的,本地连接没有网络。虚拟机是桥接方式,怎么设置虚拟机的ip才能上网?

虚拟机网络设置使用nat模式,或网桥模式,主机使用宽带连接,虚拟机不用拨号。使用网桥模式时,虚拟机必须设置静态ip,ip须和主机同一网段。参考技术A在虚拟机设置桥接模式:直接连接物理网络虚拟机网卡里设置成自动获... 查看详情

securefx怎么打开本地文件框

...。vsftp具体使用步骤:1,检查vsftp是否安装rpm-qa|grepvsftpd如果没有安装的话,可以下载安装,也可以使用软件源进行安装。如果是RedHat系列(Redhat、Centos、Fedora等)的linux主机可以使用命令yuminstallvsftp来进行在线安装,如果是Debian系... 查看详情

Docker 容器无法使用特定端口访问本地主机

...:26:53【问题描述】:在此之前,我的docker技能不是很好,如果答案很明显,请道歉。TLDR:本地运行的网站,我需要指定要访问的端口,如何允许docker容器访问该网站?更多信息:我有两个在本地运行的网站:第一个是localap 查看详情

无法从本地主机通过 JavaScript 调用 API

】无法从本地主机通过JavaScript调用API【英文标题】:CannotcallAPIbyJavaScriptfromlocalhost【发布时间】:2016-08-3115:41:47【问题描述】:我正在尝试从API中提取数据并在HTML页面中显示获得的数据。我的问题是我实际上无法访问API数据,... 查看详情

网络已连接,如何通过局域网连接共享主机

...能共享的,也就是正常中。 这时候打开网络适配器,如果是win10系统,路径应该是【控制面板\\网络和Internet\\网络连接】这样子的。把鼠标放在已连接成功的适配器上,右击,选择属性,会看到有IPv4协议。选中后,点击属性... 查看详情

如何使用 dio 从本地主机:3000 切换到准备在 Flutter 中生产的东西?

...络请求。在测试阶段,我使用本地主机端口3000。我使用javascript文件和节点在测试模式下运行它。我会简 查看详情

使用来自本地主机的 AWS Lambda REST URL [重复]

...本地机器上工作,这只是一个网站,还有一些带有Axios的JavaScript。当 查看详情