如何防止从我的工作场所 IPs/locations 在 Web 中执行某些 JS 代码?
How to prevent executing some JS code in web from my workplace IPs/locations?
我在网页中有一些 JS 代码被执行并发送一些在某些事件(例如更改页面)完成时收集的数据。我想排除我工作场所的所有(或几乎所有)设备来执行此功能,以免收集工作中产生的数据(其中 99% 是测试数据和垃圾)。
我的想法是使用地理定位或 IP 来排除此设备(或此位置)执行 JS 功能,但我不知道该怎么做。
我不希望网页显示请求地理定位许可的弹出窗口,所以我更喜欢使用 IP 定位,但我不知道它是如何工作的(一旦我有了 IP,下一步是什么?)。我看过一些服务,但其中大多数服务的请求数量非常有限 hour/day。
谢谢你,并致以最诚挚的问候。
如果您的意思是像 "other developers" 中那样工作,为什么不定义两个环境(如 Angular 中的 prod 环境)。
- 当您发布您的网页时,您可以使用产品发布它
标志
sendDiagnostics
设置为 true
. 的环境
- 开发时使用默认环境
sendDiagnostics
设置为 false
。
回答你的问题:
如果不使用外部服务(高效),则无法获取 IP 地址位置。这些服务只是将 IP 映射到位置并保留这些位置的数据库。如果您不想手动执行此操作,则需要使用其中一项服务。
要根据 ip 查找用户位置,您需要使用外部服务,例如 http://ip-api.com/, https://ipinfo.io or https://geoip-db.com。
这是一个简单的 js 函数,用于在控制台中输入用户位置和国家/地区。
function ipLookUp () {
$.ajax('http://ip-api.com/json')
.then(
function success(response) {
console.log('User\'s Location Data is ', response);
console.log('User\'s Country', response.country);
},
function fail(data, status) {
console.log('Request failed. Returned status of',
status);
}
);
}
ipLookUp()
更多信息:How To Detect The Location of Your Website’s Visitor Using JavaScript。
我最近发现了 Ipregistry (https://ipregistry.co) for a similar use case as you. Here is a code snippet that allows filtering by IP address using the standard fetch API:
var companyIpAddresses = ['1.2.3.4', '2a01:e35:2f23:e3d0::1', '2.3.4.5'];
fetch('https://api.ipregistry.co/?key=tryout')
.then(function (response) { return response.json(); })
.then(function (payload) {
var userIp = payload['ip'];
if (companyIpAddresses.includes(userIp)) {
// User is not allowed
} else {
// User is allowed
}
});
如果您的组织有自己的自治系统 (AS),您可以使用字段 payload['connection']['asn']
根据其 ASN 进行过滤。但是,使用 IP 地理定位来执行您提到的那种过滤将不够准确。这适用于您使用的任何服务。
我在网页中有一些 JS 代码被执行并发送一些在某些事件(例如更改页面)完成时收集的数据。我想排除我工作场所的所有(或几乎所有)设备来执行此功能,以免收集工作中产生的数据(其中 99% 是测试数据和垃圾)。
我的想法是使用地理定位或 IP 来排除此设备(或此位置)执行 JS 功能,但我不知道该怎么做。
我不希望网页显示请求地理定位许可的弹出窗口,所以我更喜欢使用 IP 定位,但我不知道它是如何工作的(一旦我有了 IP,下一步是什么?)。我看过一些服务,但其中大多数服务的请求数量非常有限 hour/day。
谢谢你,并致以最诚挚的问候。
如果您的意思是像 "other developers" 中那样工作,为什么不定义两个环境(如 Angular 中的 prod 环境)。
- 当您发布您的网页时,您可以使用产品发布它
标志
sendDiagnostics
设置为true
. 的环境
- 开发时使用默认环境
sendDiagnostics
设置为false
。
回答你的问题:
如果不使用外部服务(高效),则无法获取 IP 地址位置。这些服务只是将 IP 映射到位置并保留这些位置的数据库。如果您不想手动执行此操作,则需要使用其中一项服务。
要根据 ip 查找用户位置,您需要使用外部服务,例如 http://ip-api.com/, https://ipinfo.io or https://geoip-db.com。
这是一个简单的 js 函数,用于在控制台中输入用户位置和国家/地区。
function ipLookUp () {
$.ajax('http://ip-api.com/json')
.then(
function success(response) {
console.log('User\'s Location Data is ', response);
console.log('User\'s Country', response.country);
},
function fail(data, status) {
console.log('Request failed. Returned status of',
status);
}
);
}
ipLookUp()
更多信息:How To Detect The Location of Your Website’s Visitor Using JavaScript。
我最近发现了 Ipregistry (https://ipregistry.co) for a similar use case as you. Here is a code snippet that allows filtering by IP address using the standard fetch API:
var companyIpAddresses = ['1.2.3.4', '2a01:e35:2f23:e3d0::1', '2.3.4.5'];
fetch('https://api.ipregistry.co/?key=tryout')
.then(function (response) { return response.json(); })
.then(function (payload) {
var userIp = payload['ip'];
if (companyIpAddresses.includes(userIp)) {
// User is not allowed
} else {
// User is allowed
}
});
如果您的组织有自己的自治系统 (AS),您可以使用字段 payload['connection']['asn']
根据其 ASN 进行过滤。但是,使用 IP 地理定位来执行您提到的那种过滤将不够准确。这适用于您使用的任何服务。