一个内部系统,但是部署在公网上的,用户都是用 chrome 访问,基于安全性考虑加 IP 访问限制,但是有些用户没有固定公网 ip 或者甚至可能有移动设备访问。
有没有什么办法像 app 那样取到设备信息呢,加设备白名单限制访问
![]() |
1
8355 7 天前 ![]() UA 吗。。。 随便伪造
最好是借助一些外部系统跳转做 sso ,类似钉钉/飞书登陆,其实你的核心诉求是鉴权用户而不是鉴权设备。 合法用户的所有设备都可用才对 |
2
UnluckyNinja 7 天前 via Android
http 请求是可以自己构造的,设备信息不靠谱,加个 auth 模块吧
|
![]() |
3
w292614191 7 天前
如果 nginx 之类的能限制 MAC 地址就好了。
|
![]() |
4
w292614191 7 天前
我之前翻了一圈,希望能在云服务器限制 mac 地址,结果没什么好的办法。
|
![]() |
5
mightybruce 7 天前
既然都是浏览器访问,考虑一下浏览器指纹,使用一些成熟的浏览器指纹库,基本不管你 IP 和 浏览器头部做一些变化都能独立识别用户。
|
![]() |
6
mightybruce 7 天前
比如这个 js 库的 demo
https://fingerprint.com/demo/ |
![]() |
7
liuidetmks 7 天前
@w292614191 不可能的,除非你在应用层获取 mac
|
![]() |
8
leo7476040305 7 天前 via iPhone ![]() 套一层 VPN ,VPN 服务器固定 IP ,只允许 VPN 服务器 IP 访问
|
9
kristofer 7 天前
加个登陆验证?
|
10
djs 7 天前
上面老哥说的浏览器指纹可以考虑下
|
11
fox0001 7 天前 via Android
内部系统不需要用户登录的吗?如果需要,就是登录验证、二次验证等的解决方案。如果不需要登录,可以考虑颁发证书的形式。
|
12
poxiaogg 7 天前
可以用双向证书
|
![]() |
13
wangtian2020 7 天前
看你是防君子还是防小人,结果上来说就是小人防不住。
|
14
HangoX 7 天前
搭建个 vpn 吧,要么用 openvpn ,要么用 tailscale ,这样安全性会高很多
|
15
skallz 7 天前 ![]() @mightybruce 浏览器指纹只能作为辅助识别用户的手段,不能作为唯一识别用户的手段,你可以看到任何指纹库其准确率都到不了 100%,哪怕是你发的这个 npm 文档上也写了准确率为 40%至 60%
|
16
skallz 7 天前
这种需求加个 auth 模块吧,接入微信钉钉飞书就行
|
17
czk1997 7 天前
要求 SSO 。设备纳入 MDM ,加证书登录。或者类似 Cloudflare ZeroTrust 这样的方案。
|
![]() |
18
wheat0r 7 天前
如果用户都在一个或几个固定的网络里,用内网的防火墙解决问题
|
![]() |
19
htfcuddles 7 天前
你需要的是 SSO+Device Enrollment ,例如 MS 的 Intune
|
![]() |
20
xiri 7 天前 via Android ![]() @w292614191 mac 地址只在局域网有效,出了网关看到的就都是网关的 mac 地址了,你这个不可能实现的,除非你自己实现应用端和服务端,把 mac 地址封装到数据载荷里
|
![]() |
21
EndlessMemory 7 天前
搞个账号不好吗
|
![]() |
22
815979670 7 天前
套一层 webvpn 内部系统只允许通过 webvpn 访问,webvpn 不逊用户额外装什么软件 直接用浏览器访问
|
23
zgsi 7 天前
天啊,这问题不就是我年前遇到的。web 在公网,但是只给公司内部用。ip 是变化的。
想了一圈,最后闲着无聊写了个 chrome 插件,请求接口的时候追加 auth 鉴权 |
![]() |
24
ysc3839 7 天前 via Android
客户端证书,或者 http basic auth ,用户名+密码就相当于 token
|
![]() |
25
totoro625 7 天前
弄个 web 界面,让他们访问之前点击相应的链接把 IP 添加到白名单内,再访问这个系统
|
![]() |
26
luolw1998 7 天前
cloudflare Zero Trust
|
27
zgsi 7 天前
|
29
zgsi 7 天前
@imherer 内部泄露那没办法了。你给他账号密码他一样给别人。我目前这样实现了。目前测试观察阶段很稳定。我目前弊端是要刷新才会生产新的 auth ,后期可能会考虑登录后的状态有效期给长一点来解决。
如果你有了好的解决方案,麻烦踢下我! |
![]() |
30
XiLingHost 7 天前
试试 mtls 吧,或者基于 FIDO 的设备 passkey
|
32
chobitssp 7 天前
TOTP 动态口令
|
33
johnhuangemc2 7 天前
IP 限制 + VPN
我们把敏感网站限制成仅公司 IP 可访问, 然后在公司网络部署 OpenVPN, 敏感网站添加 VPN 路由配置走 VPN, 要访问敏感网站就开启 VPN 访问 |
![]() |
34
Lemon2ee 7 天前
我也建议从网络层面解决问题。
部署一个 tailscale subnet router 在服务傍边,广播服务 ip 部署一个 tailscale client 在公司内部,添加路由规则 即可达到内部可以访问服务,并且服务无法直接访问公司内部网络 (大概是这样的,没实战过 |
![]() |
35
cxh116 7 天前
客户端证书应该是比较成熟的方案吧。楼上有提到,在 nginx 里也可以实现。还可以每个客户端装不同证书,吊销指定的客户端证书。
https://developers.cloudflare.com/ssl/client-certificates/ |
37
zgzhang 7 天前
你搜索的是 JS 设备指纹
|
![]() |
38
musi 7 天前
不然还是用 electron 包个浏览器吧,你想做的都能实现
|
![]() |
39
Karte 7 天前
如果真的想进行设备上的限制, 那尽可能做个桌面端. 桌面端获取系统信息然后判定.
如果只想确保登录的人员是合法的, 那尽可能增加双重验证, 或者使用目前最新的认证方案: passkey. passkey 可以让用户不通过账户名和密码登录, 只需要手机扫描登录的二维码, 然后通过蓝牙与主机交互确认登录. |
![]() |
41
Karte 7 天前
具体可以在 (passkey)[https://passkey.org/] 网站进行了解.
|
45
zgzhang 7 天前
JS 设备指纹的确没那么文档,但绝大部分场景够用,我再给你个思路,很多企业用零信任解决这个问题,用零信任限制只有某些人和某些设备,可以访问你的系统
|
47
ssiitotoo 7 天前
只允许公司出口和 vpn 地址访问 非办公区需要使用 vpn 才能访问
|
49
zgzhang 7 天前
@imherer 你理解的零信任不对,你说的只是登录验证,https://www.aliyun.com/product/security/csas ,参考类似的产品
|
50
impaa 7 天前 via Android
azure ad 可以做到,配合條件式存取,裡面有設備 id ,如果 edge 直接支持,如果 chrome 要安裝微軟出的插件
|
![]() |
51
Karte 7 天前
|
52
NSAgold 7 天前 via Android
配个客户端证书
|
53
mooyo 7 天前
你这个标准的 zero trust 需求,用户和你能连接到国际互联网的话,使用 cloudflare zero trust 免费版就能解决了。 添加一个 application ,使用邮箱验证,把用户的邮箱加进去,每次打开的时候需要使用邮箱获得一个验证码进入。
|
55
xiayun 7 天前
ssl 双向证书认证? sso ?
|
![]() |
56
liuzimin 7 天前
说到零信任准入,我找到一个叫 NetBird 的开源项目,看上去好像可以满足要求。https://github.com/netbirdio/netbird?tab=readme-ov-file
|
57
fiveStarLaoliang 7 天前
可以考虑硬件令牌( HOTP ),类似于 U 盾,一机一码单点登录,这样就算泄密,也能追踪到个人
|
![]() |
58
internelp 7 天前
可用的方案:
1 、客户端证书 2 、HTTP basic auth 3 、VPN |
![]() |
59
irisdev 7 天前
楼上好多说 vpn 的,vpn 可以限制指定设备安装吗
|
![]() |
60
IvanLi127 7 天前
首先设备是受控的,如果不是,没得做。
然后 mtls 就行了。 |
![]() |
61
54xavier 7 天前
@mightybruce #6 我也觉得这个方案 OK ,只要浏览器登录过一次 给这个账号记录一次浏览器指纹,之后这个账号都只能是这个指纹才能登录,指纹不对了就需要重新申请绑定新指纹
![]() |
62
n18255447846 6 天前
webauthn 不用账密基于设备,新的浏览器原生 api
|
![]() |
63
liuzimin 6 天前 ![]() @irisdev tailscale 后台就可以开启设备接入认证,每个新设备都需要管理员去后台 approve 允许了才能接入。所以我觉得原理上讲 vpn 限制设备是行得通的。
|
64
xugj 6 天前
多年前做过现在也一直在用,客户端是桌面程序获取本级 MAC 地址并在服务端绑定,客户端发送 MAC 地址、局域网 IP 等信息服务端验证通过调用浏览器打开指定地址;不知道这样会不会有什么安全隐患?
|
65
han3sui 6 天前
每次登录加个短信验证码
|
![]() |
66
kalthus 6 天前
记得很多年前有过类似的需求,当时是写了个 activex 获取设备的 mac 地址(现在好像没有 activex 了?)
|
![]() |
69
chanChristin 6 天前
我们用的就是 ip 白名单,至于没有公网 ip 或者没有固定 ip 的用户就给他们加临时白名单,大部分时间都是在固定场所登录的。
|
![]() |
70
wangyzj 6 天前
浏览器指纹
|
![]() |
71
JEME 6 天前 via Android
你是否在找,堡垒机,或者特权访问系统
|
72
listenerri 6 天前
为什么不用系统防火墙呢,针对业务端口设置 IP 白名单
|